並列インデックス操作

インデックスの作成や再構築、クラスタ化インデックスの削除などのインデックス操作用に構築されたクエリ プランでは、複数のマイクロプロセッサを備えたコンピュータでの並列マルチスレッド操作が可能になります。

注意

並列インデックス操作は、SQL Server 2008 Enterprise でのみ使用できます。

SQL Server では、インデックス操作の並列処理の限度 (実行に使用する個別スレッドの合計数) を決める際に、他のクエリに行うのと同じアルゴリズムが使用されます。インデックス操作に必要な並列処理の最大限度は、max degree of parallelism サーバー構成オプションによって決まります。CREATE INDEX、ALTER INDEX、DROP INDEX、および ALTER TABLE の各ステートメントの MAXDOP インデックス オプションを設定することにより、個別のインデックス操作の max degree of parallelism 値を上書きできます。

データベース エンジンによってインデックス実行プランが構築される際に、並列操作の数は、次のうち最も低い値に設定されます。

  • コンピュータ内のマイクロプロセッサ (CPU) の数。

  • max degree of parallelism サーバー構成オプションで指定されている数。

  • SQL Server のスレッド用に実行される作業のしきい値以下の CPU の数。

たとえば、CPU が 8 基ある場合でも、max degree of parallelism が 6 に設定されているコンピュータでは、インデックス操作用に生成される並列スレッドの数は最大 6 つです。インデックス実行プランを構築するとき、コンピュータ内の 5 基の CPU が SQL Server の作業のしきい値を超えている場合は、実行プランによって指定される並列スレッドの数は 3 つだけになります。

並列インデックス操作の主なフェーズには、次のフェーズがあります。

  • 調整スレッドがテーブルを迅速かつランダムにスキャンし、インデックス キーの分布を算出します。調整スレッドが、並列操作の限度と等しい数のキー範囲を作成するキーの境界を確立します。それぞれのキー範囲は、同じ数の行を処理対象として算出されます。たとえば、テーブル内に 400 万行あって並列処理の限度が 4 の場合、調整スレッドは 1 セット 100 万行で 4 セットの行に区切るキー値を決定します。すべての CPU を使用するために十分なキー範囲を確立できない場合、並列処理の限度が適宜減少されます。

  • 調整スレッドは、並列操作の限度と等しい数のスレッドを優先して、それらのスレッドの作業が完了するまで待ちます。各スレッドは、スレッドに割り当てられた範囲内のキー値を持つ行だけを取得するフィルタを使用して、ベース テーブルをスキャンします。各スレッドは、そのキーの範囲内で行のインデックス構造を構築します。パーティション インデックスの場合、各スレッドで指定した数のパーティションが構築されます。パーティションはスレッド間では共有されません。インデックスの構築方法の詳細については、「tempdb とインデックスの作成」を参照してください。

  • すべての並列スレッドが完了した後で、調整スレッドはインデックスのサブユニットを単一のインデックスに接続します。このフェーズは、オフライン インデックス操作にのみ適用されます。

個別の CREATE TABLE ステートメントまたは ALTER TABLE ステートメントには、インデックスの作成を必要とする複数の制約を含む場合があります。これらの複数のインデックス作成操作は連続して実行されますが、個別のインデックス作成操作は複数の CPU を備えたコンピュータでは並列操作になることがあります。