並列インデックス操作の構成
Microsoft SQL Server 2005 Enterprise Edition を稼動しているマルチプロセッサ コンピュータでは、インデックス ステートメントに複数のプロセッサを使用して、他のクエリと同様にこのインデックス ステートメントに関連するスキャン操作や並べ替え操作を実行できます。1 つのインデックス ステートメントの実行に使用されるプロセッサの数は、max degree of parallelism 構成オプションと現在のワークロードによって決まります。max degree of parallelism オプションを使用すると、並列プランの実行に使用されるプロセッサ数が制限されます。SQL Server 2005 データベース エンジン によりシステムがビジー状態であることが検出されると、ステートメントの実行が開始される前に、インデックス操作の並列処理の次数が自動的に削減されます。
メモ : |
---|
並列インデックス操作は、SQL Server 2005 Enterprise 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
参照
概念
その他の技術情報
ALTER INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
CREATE INDEX (Transact-SQL)
DROP INDEX (Transact-SQL)