並列インデックス操作の構成

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

このトピックでは、並列処理の最大限度に関する定義と、SQL Server で SQL Server Management Studio または Transact-SQL を使用してこの設定を変更する方法について説明します。

SQL Server Enterprise 以上を実行するマルチプロセッサ システムでは、他のクエリと同様、このステートメントに関連付けられているスキャン操作、並べ替え操作、インデックス操作などの実行に、インデックスのステートメントで複数のプロセッサ (CPU) が使用される場合があります。 1 つのインデックス ステートメントの実行に使用される CPU の数は、max degree of parallelism サーバー構成オプション、現在のワークロード、およびインデックス統計によって決まります。 max degree of parallelism オプションによって、並列プランの実行で使用するプロセッサの最大数が決まります。 SQL Server データベース エンジンでシステムがビジー状態であることが検出されると、ステートメントの実行前に自動的にインデックス操作の並列処理数が減少します。 データベース エンジンでは、パーティション分割されていないインデックスの先頭のキー列で個々の値の数が制限されている場合や、個々の値の頻度が大きく異なる場合に、並列処理の次数を減らすこともできます。 詳細については、「クエリ処理アーキテクチャ ガイド」を参照してください。

Note

並列インデックス操作は、SQL Server の一部のエディションでは使用できません。 詳しくは、「SQL Server 2022 の各エディションとサポートされている機能」を参照してください。

このトピックの内容

はじめに

制限事項と制約事項

  • 通常は、クエリ オプティマイザーによって使用されるプロセッサ数で、最適なパフォーマンスが得られます。 ただし、非常に大きなインデックスの作成、再構築、または削除などの操作ではリソースが集中的に消費されるので、インデックス操作中に、他のアプリケーションやデータベース操作でリソースが不足する可能性があります。 この問題が発生した場合は、インデックス操作に使用するプロセッサ数を制限することで、インデックス ステートメントの実行に使用される最大プロセッサ数を手動で構成できます。

  • MAXDOP インデックス オプションは、このオプションを指定しているクエリに関してのみ、max degree of parallelism 構成オプションをオーバーライドします。 次の表に、max degree of parallelism 構成オプションと MAXDOP インデックス オプションで指定できる有効な整数値を示します。

    内容
    0 現在のシステム ワークロードに応じて、使用する CPU 数をサーバーが決定するように指定します。 この値は既定値であり、推奨の設定です。
    1 並列プラン生成を抑制します。 操作は順番に実行されます。
    2 ~ 64 プロセッサ数が指定値まで制限されます。 現在のワークロードによっては、使用されるプロセッサ数が少なくなる場合があります。 使用できる CPU 数よりも大きな値を指定した場合は、実際に使用できる CPU 数が使用されます。
  • インデックスの並列実行と MAXDOP インデックス オプションは、次の Transact-SQL ステートメントに適用されます。

  • ALTER INDEX (...) REORGANIZE ステートメントには、MAXDOP インデックス オプションを指定できません。

  • クエリ オプティマイザーで構築操作に 2 次以上の並列処理が適用されると、並べ替えを必要とするパーティション インデックス操作に必要なメモリ容量がさらに大きくなる場合があります。 並列処理の次数が高いと、必要なメモリ容量も大きくなります。 詳細については、「 Partitioned Tables and Indexes」を参照してください。

アクセス許可

テーブルまたはビューに対する ALTER 権限が必要です。

SQL Server Management Studio を使用する

インデックスに並列処理の最大限度を設定するには

  1. オブジェクト エクスプローラーで、インデックスの並列処理の最大限度を設定するテーブルが格納されているデータベースをプラス記号をクリックして展開します。

  2. [テーブル] フォルダーを展開します。

  3. インデックスの並列処理の最大限度を設定するテーブルをプラス記号をクリックして展開します。

  4. [インデックス] フォルダーを展開します。

  5. 並列処理の最大限度を設定するインデックスを右クリックし、 [プロパティ]を選択します。

  6. [ページの選択][オプション]を選択します。

  7. [並列処理の最大限度]を選択し、1 ~ 64 の範囲の値を入力します。

  8. [OK] をクリックします。

Transact-SQL の使用

既存のインデックスに並列処理の最大限度を設定するには

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。

    USE AdventureWorks2022;   
    GO  
    /*Alters the IX_ProductVendor_VendorID index on the Purchasing.ProductVendor table so that, if the server has eight or more processors, the Database Engine will limit the execution of the index operation to eight or fewer processors.  
    */  
    ALTER INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor  
    REBUILD WITH (MAXDOP=8);   
    GO  
    

詳細については、「ALTER INDEX (Transact-SQL)」を参照してください。

新しいインデックスを作成するときに並列処理の最大限度を指定する

  1. オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。

  2. [標準] ツール バーの [新しいクエリ] をクリックします。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] をクリックします。

    USE AdventureWorks2022;  
    GO  
    CREATE INDEX IX_ProductVendor_NewVendorID   
    ON Purchasing.ProductVendor (BusinessEntityID)  
    WITH (MAXDOP=8);  
    GO  
    

関連項目

クエリ処理アーキテクチャ ガイド
CREATE INDEX (Transact-SQL)
ALTER INDEX (Transact-SQL)
DROP INDEX (Transact-SQL)
ALTER TABLE (Transact-SQL)
ALTER TABLE table_constraint (Transact-SQL)
ALTER TABLE index_option (Transact-SQL)