web-dev-qa-db-ja.com

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

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

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

DBCC INDEXDEFRAG(0、829610394、1)

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

9
RelentlessMike

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

ありがとう

15
Paul S. Randal

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/