max degree of parallelism (サーバー構成オプション) の構成

適用対象: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 (MAXDOP) によって設定される制限の詳細については、このページの「考慮事項」セクションを参照してください。 SQL Server では、クエリ、インデックス データ定義言語 (DDL) の操作、並列挿入、オンライン列変更、並行統計コレクション、静的およびキーセット ドリブン カーソルの作成の場合に並列実行プランが検討されます。

Note

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

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

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

はじめに

考慮事項

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

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

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

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

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

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

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

  • クエリおよびインデックスの操作だけでなく、このオプションも DBCC CHECKTABLE、DBCC CHECKDB、および DBCC CHECKFILEGROUP の並列処理を制御します。 トレース フラグ 2528 を使用して、これらのステートメントの並列実行プランを無効にすることができます。 詳細については、トレース フラグ (Transact-SQL)に関する記事を参照してください。

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

推奨事項

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

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 ノードあたりの論理プロセッサ数の半分に保つ

Note

上の表の NUMA ノードは、SQL Server 2016 (13.x) 以降で自動的に作成されるソフト NUMA ノード、またはソフト NUMA が無効になっている場合はハードウェア ベースの NUMA ノードを表します。 Resource Governor ワークロード グループに対して max degree of parallelism オプションを設定する場合は、これらと同じガイドラインを使用します。 詳細については、「CREATE WORKLOAD GROUP (Transact-SQL)」を参照してください。

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 の使用

T-SQL を使用して並列処理の最大限度オプションを構成する

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

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

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

USE AdventureWorks2022;  
GO   
EXEC sp_configure 'show advanced options', 1;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  
EXEC sp_configure 'max degree of parallelism', 16;  
GO  
RECONFIGURE WITH OVERRIDE;  
GO  

詳細については、「サーバー構成オプション (SQL Server)」を参照してください。

補足情報: max degree of parallelism オプションを構成した後

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