web-dev-qa-db-ja.com

SQL Server 2012のALTERインデックスジョブが失敗する

Olaのメンテナンスソリューションを使用してALTER Indexジョブをセットアップしました。ジョブは以下のエラーで失敗し、ジョブはロックで失敗します enter image description here

3
Sunny

あなたの問題に対するいくつかの可能な解決策はここにあります:

オプション1:そのインデックスを再構築しない

これは、30 GBのインデックスです。再構築によって解決しようとしている測定可能なパフォーマンスの問題は何ですか?特に5%の断片化では、これは(システムリソースとロックの点で)非常にわずかな利益のために非常に高価な操作のように見えます。

インデックスの再構築をあきらめたい理由について、非常に根拠のある意見をここで読むことができます。

これはあなたの最高の、そして最も簡単なオプションです。これが本塁打です。これを行う。

オプション2:オンラインで再構築

インデックスの再構築にはSCH-Mロックが必要です。 WITH (ONLINE = ON)ALTER INDEXコマンドに追加すると、そのロックは再構築操作の最後まで延期されます。これはmightメンテナンスタスクの完了を妨げているものがロックを解放する可能性を高めます。

オプション3:ブロッキングクエリを特定する

これはおそらくオプションの中で最も多くの作業です。 ALTER INDEXコマンドの実行中にsp_WhoIsActiveを実行すると、他に何が実行されているかが示されます。具体的には、他のセッションがALTER INDEXコマンドによるロックの取得をブロックしていることを示します。その時点で、問題に対処するための多くのオプションがあります。

  • インデックスのメンテナンスを再スケジュールして、ブロッキングクエリと同時に実行されないようにする
  • より少ないロック/異なるロック/より少ない時間のロックを保持するようにブロッキングクエリを作り直します(それが必要な場合は、実行計画の詳細を含む別の質問を投稿できます)
  • インデックスのメンテナンスを行っている間は実行されないように、ブロッキングクエリを再スケジュールします。
6
Josh Darnell