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

適用対象:データベース Azure SQL Managed Instance Azure SQL SQL Server (サポートされているすべてのバージョン)

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

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

注意

並列インデックス操作は、 SQL Server のすべてのエディションで使用できるわけではありません。 詳細については、「 SQL Server 2016 の各エディションがサポートする機能」を参照してください。

このトピックの内容

はじめに

制限事項と制約事項

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

  • 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」を参照してください。

Permissions

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

SQL Server Management Studio を使用する

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

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

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

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

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

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

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

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

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

Transact-SQL の使用

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

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

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

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

    USE AdventureWorks2012;   
    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 AdventureWorks2012;  
    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)