並列インデックス操作の構成
SQL Server Enterprise を実行するマルチプロセッサ コンピュータでは、他のクエリと同様に、インデックスのステートメントがこのステートメントに関連付けられているスキャン操作、並べ替え操作、インデックス操作などの実行に、複数のプロセッサを使用する場合があります。1 つのインデックス ステートメントの実行に使用されるプロセッサの数は、max degree of parallelism 構成オプション、現在のワークロード、およびインデックス統計によって決まります。max degree of parallelism オプションによって、並列プランの実行で使用するプロセッサの最大数が決まります。SQL Server データベース エンジンによりシステムがビジー状態であることが検出されると、ステートメントの実行が開始される前に、インデックス操作の並列処理の次数が自動的に削減されます。データベース エンジンでは、パーティション分割されていないインデックスの先頭のキー列で個々の値の数が制限されている場合や、個々の値の頻度が大きく異なる場合に、並列処理の次数を減らすこともできます。
注意 |
---|
並列インデックス操作は、SQL Server Enterprise Edition、Developer Edition、および Evaluation Edition でのみ使用できます。 |
通常は、クエリ オプティマイザによって使用されるプロセッサ数で、最適なパフォーマンスが得られます。ただし、非常に大きなインデックスの作成、再構築、または削除などの操作ではリソースが集中的に消費されるので、インデックス操作中に、他のアプリケーションやデータベース操作でリソースが不足する可能性があります。この問題が発生したときは、MAXDOP インデックス オプションを指定し、インデックス操作に使用するプロセッサ数を制限することで、インデックス ステートメントの実行に使用される最大プロセッサ数を手動で構成できます。
MAXDOP インデックス オプションは、このオプションを指定しているクエリに関してのみ、max degree of parallelism 構成オプションよりも優先されます。次の表は、max degree of parallelism 構成オプションと MAXDOP インデックス オプションで指定できる有効な整数値を一覧しています。
値 |
説明 |
---|---|
0 |
現在のシステム ワークロードに応じて、実際に使用可能な数の CPU が使用されます。この値は既定値であり、推奨の設定です。 |
1 |
並列プランの生成を抑制します。操作は順番に実行されます。 |
2-64 |
プロセッサ数が指定値まで制限されます。現在のワークロードによっては、使用されるプロセッサ数が少なくなる場合があります。使用できる CPU 数よりも大きな値を指定した場合は、実際に使用できる CPU 数が使用されます。 |
インデックスの並列実行と MAXDOP インデックス オプションは、次の Transact-SQL ステートメントに適用されます。
CREATE INDEX
ALTER INDEX REBUILD
DROP INDEX (このステートメントは、クラスタ化インデックスのみに適用されます。)
ALTER TABLE ADD (インデックス) CONSTRAINT
ALTER TABLE DROP (クラスタ化インデックス) CONSTRAINT
MAXDOP インデックス オプションを使用する際には、max degree of parallelism 構成オプションで使用される意味上の規則をすべて適用できます。詳細については、「max degree of parallelism オプション」を参照してください。
LOB_COMPACTION を指定しても指定しなくても ALTER INDEX REORGANIZE を実行するときは、max degree of parallelism 値は 1 つのスレッド操作になります。ALTER INDEX REORGANIZE ステートメントには、MAXDOP インデックス オプションを指定できません。
オンライン インデックス操作
オンライン インデックス操作では、インデックス操作中に同時ユーザー操作が可能です。MAXDOP オプションを使用して、オンラインでのインデックス操作専用に使用する最大プロセッサ数を制御できます。このようにすることで、インデックス操作で使用されるリソースと他の同時実行ユーザーが使用するリソースのバランスをとることができます。詳細については、「オンラインでのインデックス操作の実行」を参照してください。
パーティション インデックス操作
クエリ オプティマイザが構築操作に 2 次以上の並列処理を適用すると、並べ替えを必要とするパーティション インデックス操作に必要なメモリ容量がさらに大きくなる場合があります。並列処理の次数が高いと、必要なメモリ容量も大きくなります。詳細については、「パーティション インデックスの専用ガイドライン」を参照してください。
例
次の例では、ProductVendor テーブルに IX_ProductVendor_VendorID というインデックスを作成し、max degree of parallelism オプションを 8 に設定しています。サーバーに 8 基以上のプロセッサが搭載されている場合も、インデックス操作の実行はデータベース エンジンにより 8 基以下のプロセッサに制限されます。
USE AdventureWorks;
GO
IF EXISTS (SELECT name FROM sys.indexes
WHERE name = N'IX_ProductVendor_VendorID')
DROP INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor;
GO
CREATE INDEX IX_ProductVendor_VendorID
ON Purchasing.ProductVendor (VendorID)
WITH (MAXDOP=8);
GO