適用対象:SQL Server
Azure SQL Database
Azure SQL Managed Instance
Microsoft Fabric プレビューの SQL データベース
この記事では、並列処理の最大限度を定義し、SQL Server Management Studio または Transact-SQL を使用して SQL Server でこの設定を変更する方法について説明します。
SQL Server Enterprise 以降を実行しているマルチプロセッサ システムでは、他のクエリと同様に、インデックス ステートメントで複数のプロセッサ (CPU) を使用して、インデックス ステートメントに関連付けられたスキャン、並べ替え、およびインデックス操作を実行できます。 1 つのインデックス ステートメントの実行に使用される CPU の数は、max degree of parallelism サーバー構成オプション、現在のワークロード、およびインデックス統計によって決まります。
max degree of parallelism オプションによって、並列プランの実行で使用するプロセッサの最大数が決まります。 SQL Server データベース エンジンでシステムがビジー状態であることが検出されると、ステートメントの実行前に自動的にインデックス操作の並列処理数が減少します。 データベース エンジンでは、パーティション分割されていないインデックスの先頭のキー列で個々の値の数が制限されている場合や、個々の値の頻度が大きく異なる場合に、並列処理の次数を減らすこともできます。 詳細については、「クエリ処理アーキテクチャ ガイド」を参照してください。
Note
並列インデックス操作は、すべての SQL Server エディションで使用できるわけではありません。 詳しくは、「SQL Server 2022 の各エディションとサポートされている機能」を参照してください。
制限事項
通常は、クエリ オプティマイザーによって使用されるプロセッサ数で、最適なパフォーマンスが得られます。 ただし、非常に大きなインデックスの作成、再構築、または削除などの操作ではリソースが集中的に消費されるので、インデックス操作中に、他のアプリケーションやデータベース操作でリソースが不足する可能性があります。
この問題が発生した場合は、インデックス操作に使用するプロセッサ数を制限することで、インデックス ステートメントの実行に使用される最大プロセッサ数を手動で構成できます。
MAXDOPインデックス オプションは、このオプションを指定するクエリに対してのみ、並列処理の最大次数構成オプションをオーバーライドします。 次の表に、並列処理の最大次数構成オプションとMAXDOPインデックス オプションで指定できる有効な整数値を示します。Value Description 0 現在のシステム ワークロードに応じて、使用する CPU 数をサーバーが決定するように指定します。 この値は既定値であり、推奨の設定です。 1 並列プラン生成を抑制します。 操作は順次実行されます。 2-64 プロセッサ数が指定値まで制限されます。 現在のワークロードによっては、使用されるプロセッサが少なくなる場合があります。 使用できる CPU 数よりも大きな値を指定した場合は、実際に使用できる CPU 数が使用されます。 並列インデックス実行と
MAXDOPindex オプションは、次の Transact-SQL ステートメントに適用されます。MAXDOPステートメントでは、ALTER INDEX (...) REORGANIZEindex オプションを指定できません。クエリ オプティマイザーで構築操作に 2 次以上の並列処理が適用されると、並べ替えを必要とするパーティション インデックス操作に必要なメモリ容量がさらに大きくなる場合があります。 並列処理の次数が高いと、必要なメモリ容量も大きくなります。 詳細については、「パーティション テーブルとインデックス」を参照してください。
Permissions
テーブルまたはビューに対する ALTER 権限が必要です。
SQL Server Management Studio を使用する
インデックスの並列処理の最大次数を設定する
オブジェクト エクスプローラーで、プラス記号を選択して、インデックスの並列処理の最大限度を設定するテーブルを含むデータベースを展開します。
[テーブル] フォルダーを展開します。
プラス記号を選択して、インデックスの並列処理の最大限度を設定するテーブルを展開します。
[インデックス] フォルダーを展開します。
並列処理の最大限度を設定するインデックスを右クリックし、 [プロパティ]を選択します。
[ページの選択]の [オプション]を選択します。
[並列処理の最大限度]を選択し、1 ~ 64 の範囲の値を入力します。
[OK] を選択.
Transact-SQL の使用
既存のインデックスに対して並列処理の最大限度を設定する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで、 [新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、実行
選択します。 このコードは、 IX_ProductVendor_VendorIDテーブルのPurchasing.ProductVendorインデックスを変更し、サーバーに 8 つ以上のプロセッサがある場合、データベース エンジンはインデックス操作の実行を 8 個以下のプロセッサに制限します。USE AdventureWorks2022; GO ALTER INDEX IX_ProductVendor_VendorID ON Purchasing.ProductVendor REBUILD WITH(MAXDOP = 8); GO
詳細については、ALTER INDEX に関する記事をご覧ください。
新しいインデックスを作成するときに並列処理の最大限度を指定する
オブジェクト エクスプローラーで、 データベース エンジンのインスタンスに接続します。
標準バーで、 [新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、実行
選択します。 USE AdventureWorks2022; GO CREATE INDEX IX_ProductVendor_NewVendorID ON Purchasing.ProductVendor(BusinessEntityID) WITH (MAXDOP = 8); GO