サーバー構成: 並列処理の最大次数

適用対象: SQL Server

この記事では、SQL Server Management Studio、Azure Data Studio、または Transact-SQL を使用して、SQL Server の max degree of parallelism (MAXDOP) サーバー構成オプションを構成する方法について説明します。 複数のマイクロプロセッサまたは CPU が搭載されたコンピューターで SQL Server のインスタンスを実行されている場合、並列処理を使用できるかどうかがデータベース エンジンによって検出されます。 並列処理の次数に基づいて、並列プランの実行ごとに、1 つのステートメントを実行するために使用されるプロセッサの数が設定されます。 max degree of parallelism オプションを使用すると、並列プラン実行で使用するプロセッサの数を制限できます。 制限の設定 max degree of parallelismの詳細については、このページの 「考慮事項」 セクションを参照してください。 SQL Server では、クエリ、インデックス データ定義言語 (DDL) の操作、並列挿入、オンライン列変更、並行統計コレクション、静的およびキーセット ドリブン カーソルの作成の場合に並列実行プランが検討されます。

SQL Server 2019 (15.x) では、インストール プロセス中に使用可能なプロセッサの数に基づいてサーバー構成オプションを設定 max degree of parallelism するための自動推奨事項が導入されました。 セットアップのユーザー インターフェイスでは、推奨設定を受け入れることも、独自の値を入力することもできます。 詳細については、「[データベース エンジンの構成] - [MAXDOP] ページ」を参照してください。

Azure SQL Database と Azure SQL Managed Instance では、新しい単一データベース、エラスティック プール データベース、およびマネージド インスタンスごとに既定の MAXDOP 設定が使用されます8。 Azure SQL Database では、データベース スコープの MAXDOP 構成は 〘 に 8設定されます。 Azure SQL Managed Instance では、サーバー構成 max degree of parallelism オプションは 8.

Azure SQL データベース の MAXDOP の詳細については、「Azure SQL Database での並列処理の最大限度 (MAXDOP) の構成」を参照してください。

考慮事項

このオプションは詳細設定オプションであるため、熟練したデータベース管理者または認定された SQL Server プロフェッショナルだけが変更するようにしてください。

関係マスク オプションを既定値に設定していないと、対称型マルチプロセッシング (SMP) システムで SQL Server が使用できるプロセッサの数が制限されることがあります。

0 SQL Server で使用可能なすべてのプロセッサを最大 64 個のプロセッサで使用できるように設定max degree of parallelismします。 しかし、ほとんどの場合、この値は推奨されません。 並列処理の最大限度の推奨値の詳細については、このページの「推奨事項」セクションを参照してください。

並列プランの生成を中止するには、max degree of parallelism1 に設定します。 1 つのクエリの実行中に使用できるプロセッサ コアの最大数を指定するには、値を 1 - 32,767 に設定します。 使用可能なプロセッサ数よりも多い値を指定すると、実際に使用可能なプロセッサ数が使用されます。 コンピューターにプロセッサが 1 つしか搭載されていない場合、max degree of parallelism の値は無視されます。

並列処理の最大限度の制限はタスクごとに設定されます。 この設定は、要求ごとまたはクエリ制限ごとではありません。 つまり、並列クエリの実行中に、1 つの要求で MAXDOP の制限まで複数のタスクを生成でき、各タスクは 1 つのワーカーと 1 つのスケジューラを使用します。 詳細については、「スレッドとタスクのアーキテクチャ ガイド」 の「並列タスク のスケジュール設定」セクションを 参照してください。

並列処理の最大限度のサーバー構成値をオーバーライドすることができます。

  • クエリ レベルで、クエリ ヒントまたはクエリ ストア ヒントを使用MAXDOPします。
  • データベース レベルで、データベース スコープ構成MAXDOP使用します。
  • ワークロード レベルで、CREATE WORKLOAD GROUPMAX_DOP使用します。

インデックスを作成または再構築したり、クラスター化インデックスを削除するインデックス操作には、リソースを集中して使用するものがあります。 インデックス ステートメントの MAXDOP インデックス オプションを指定して、インデックス操作の max degree of parallelism 値をオーバーライドできます。 MAXDOP 値は実行時にステートメントに適用され、インデックス メタデータには保存されません。 詳細については、「 並列インデックス操作の構成」を参照してください。

このオプションでは、クエリとインデックス操作に加えて、、、DBCC CHECKDBDBCC CHECKFILEGROUPの並列処理DBCC CHECKTABLEも制御します。 トレース フラグ 2528 を使用して、これらのステートメントの並列実行プランを無効にすることができます。 詳細については、「トレース フラグ 2528」を参照してください

SQL Server 2022 (16.x) では、並列処理の次数 (DOP) フィードバックという新機能が導入されました。これは、経過時間と待機時間に基づいて、反復するクエリの非効率な並列処理を特定することでクエリのパフォーマンスを向上します。 DOP フィードバックは、インテリジェント クエリ処理ファミリ機能の一部であり、反復するクエリに対する並列処理の最適化されていない使用に対応するものです。 DOP フィードバックの詳細については、「並列処理の次数 (DOP) のフィードバック」を参照してください。

推奨事項

SQL Server 2016 (13.x) 以降のバージョンでは、データベース エンジンが起動時に NUMA ノードまたはソケットごとに 8 つ以上の物理コアを検出した場合、サービスの起動時に、ソフト NUMA ノードが既定で自動的に作成されます。 データベース エンジンにより、同じ物理コアからさまざまなソフト NUMA ノードに論理プロセッサが配置されます。 次の表の推奨事項は、並列クエリのすべてのワーカー スレッドを同じソフト NUMA ノード内に保持することを目的としています。 これにより、ワークロードの NUMA ノード間でのワーカー スレッドのクエリと分散のパフォーマンスが向上します。 詳細については、「ソフト NUMA (SQL Server)」を参照してください。

SQL Server 2016 (13.x) 以降のバージョンでは、サーバー構成値を構成するときに次のガイドラインを max degree of parallelism 使用します。

サーバー構成 プロセッサの数 ガイダンス
単一の NUMA ノードを持つサーバー 8 以下の論理プロセッサ MAXDOP を論理プロセッサの数以下に保持する
単一の NUMA ノードを持つサーバー 8 を超える論理プロセッサ MAXDOP を 8 に保つ
複数の NUMA ノードを持つサーバー NUMA ノードあたり 16 以下の論理プロセッサ MAXDOP を NUMA ノードあたりの論理プロセッサ数以下に保持する
複数の NUMA ノードを持つサーバー NUMA ノードあたり 16 を超える論理プロセッサ 最大値を 16 として、MAXDOP を NUMA ノードあたりの論理プロセッサ数の半分に保つ

前の表の NUMA ノードは、SQL Server 2016 (13.x) 以降のバージョンによって自動的に作成されるソフト NUMA ノード、またはソフト NUMA が無効になっている場合はハードウェアベースの NUMA ノードを指します。

Resource Governor ワークロード グループに対して max degree of parallelism オプションを設定する場合は、これらと同じガイドラインを使用します。 詳細については、「CREATE WORKLOAD GROUP」を参照してください

SQL Server 2014 以前のバージョン

SQL Server 2008 (10.0.x) から SQL Server 2014 (12.x) では、max degree of parallelism サーバーの構成値を構成する場合、以下のガイドラインを使用します。

サーバー構成 プロセッサの数 ガイダンス
単一の NUMA ノードを持つサーバー 8 以下の論理プロセッサ MAXDOP を論理プロセッサの数以下に保持する
単一の NUMA ノードを持つサーバー 8 を超える論理プロセッサ MAXDOP を 8 に保つ
複数の NUMA ノードを持つサーバー NUMA ノードあたり 8 以下の論理プロセッサ MAXDOP を NUMA ノードあたりの論理プロセッサ数以下に保持する
複数の NUMA ノードを持つサーバー NUMA ノードあたり 8 を超える論理プロセッサ MAXDOP を 8 に保つ

アクセス許可

パラメーターなしで、または最初のパラメーターだけを指定して sp_configure を実行する権限は、既定ですべてのユーザーに付与されます。 両方のパラメーターを指定して sp_configure を実行し構成オプションを変更したり RECONFIGURE ステートメントを実行したりするには、ALTER SETTINGS サーバーレベル権限がユーザーに付与されている必要があります。 ALTER SETTINGS 権限は、sysadmin 固定サーバー ロールと serveradmin 固定サーバー ロールでは暗黙のうちに付与されています。

SQL Server Management Studio または Azure Data Studio を使用する

Azure Data Studio で拡張機能を Database Admin Tool Extensions for Windows インストールするか、次の T-SQL メソッドを使用します。

これらのオプションにより、インスタンスの MAXDOP 変更が行われます。

  1. オブジェクト エクスプローラーで、インスタンス名を右クリックし、[プロパティ] を選びます。

  2. [詳細設定] ノードを選びます。

  3. [並列処理の最大限度] ボックスで、並列プランの実行で使用するプロセッサの最大数を指定します。

Transact-SQL の使用

  1. SQL Server Management Studio または Azure Data Studio を使ってデータベース エンジンに接続します。

  2. 標準バーから、 [新しいクエリ] を選択します。

  3. 次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例では、 sp_configure を使用して、 max degree of parallelism オプションを 16に設定する方法を示します。

    USE master;
    GO
    
    EXECUTE sp_configure 'show advanced options', 1;
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE sp_configure 'max degree of parallelism', 16;
    GO
    
    RECONFIGURE WITH OVERRIDE;
    GO
    
    EXECUTE sp_configure 'show advanced options', 0;
    GO
    
    RECONFIGURE;
    GO
    

詳しくは、「サーバー構成オプション」をご覧ください。

補足情報: 並列処理の最大次数オプションを構成した後

新しい設定は、サーバーを再起動しなくてもすぐに有効になります。