2つのDBCC INDEXDEFRAGコマンドをそれぞれ異なるテーブルで同時に実行できますか?


9

現在、SQL Server 2005データベースのすべてのテーブルに対して、一度に1つのテーブルに対してDBCC INDEXDEFRAGを実行するスクリプトを実行しています。スペースの制約と稼働時間の要件により、INDEXDEFRAGの代わりにDBCC DBREINDEXを使用することはできません。

特定のテーブルが最適化されるまでに長い時間がかかることに気づきました。たとえば、 "sys.dm_exec_requests"動的管理ビューを調べると、table_idが829610394であるテーブルのクラスター化インデックスで、次のINDEXDEFRAGが現在削除されていることがわかります。

DBCC INDEXDEFRAG(0、829610394、1)

デフラグプロセスが完了するまでにはかなりの時間がかかることは承知しています。現在実行中のスクリプトが最終的にすべてのテーブルを最適化するという事実は別として、現在のコマンドの実行中に別のテーブルのクラスター化インデックスで別のDBCC INDEXDEFRAGを手動で実行することに害はありますか?これを行うと、両方のテーブルが実際に同時に最適化されますか?

回答:


15

はい、複数のテーブルに対して実行できます。同じテーブルの複数のインデックスに対してそれを行うことはできません-私はそれを防ぐために新しいインデックスロックサブリソースを発明しました。2005年に置き換えたALTER INDEX ... REORGANIZEと同じ動作。

ありがとう


2
あなたはそれを書いた人からのものより正確な答えを得ることができません!同時に複数の再構築または再編成を行うことに関連するIO負荷を忘れないでください。また、今後のDBCCコマンドではなく、必ずALTER INDEXを使用してください。
AndrewSQL、2011年

同意しましたが、この問題について、Paul Randalからの直接の回答よりも正確な回答を得ることがどのようにして可能になるかわかりません。ポールに感謝します。
RelentlessMike、2011年

6

DBCC INDEXDEFRAGとDBREINDEXは廃止され、ALTER INDEXに置き換えられていることに注意してください。

重要

この機能は、Microsoft SQL Serverの将来のバージョンでは削除される予定です。この機能を新しい開発作業で使用しないでください。また、この機能を現在使用しているアプリケーションをできるだけ早く変更してください。代わりにALTER INDEXを使用してください。-http://msdn.microsoft.com/en-us/library/ms177571(v = SQL.90).aspx

2つを同時に実行する場合は、ファイルレイアウトによって異なります。それらがすべて同じディスク上にある場合、I / Oのために互いに戦っているので、それぞれが遅くなる可能性があります。必要な場合にのみREORGまたはREBUILDするのが最善です。自動化された解決策については、ミシェルアフォードのスクリプトをこちらで確認してください。http//sqlfool.com/2010/04/index-defrag-script-v4-0/


エリック、ありがとう。この特定のケースでは、データベースは複数のデータファイル、異なるパーティション、およびIBM DS8300 SANの上に分散しています。ですから、I / Oに関しては大丈夫だと思います。
RelentlessMike、2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.