適用対象: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、Fabric の SQL データベース、および Azure SQL Managed Instance では、新しい単一データベース、エラスティック プール データベース、マネージド インスタンスの既定のMAXDOP
設定が8
。 Fabric の Azure SQL Database と SQL データベースでは、 MAXDOP
データベース スコープの構成が 8
に設定されます。 Azure SQL Managed Instance では、max degree of parallelism
サーバー構成オプションは 8
に設定されています。
Azure SQL Database または Fabric の SQL データベースの MAXDOP
の詳細については、「Azure SQL Database での 並列処理の最大限度 (MAXDOP) と Fabric の SQL データベースの構成」を参照してください。
Considerations
このオプションは詳細設定オプションであるため、熟練したデータベース管理者または認定された SQL Server プロフェッショナルだけが変更するようにしてください。
関係マスク オプションを既定値に設定していないと、対称型マルチプロセッシング (SMP) システムで SQL Server が使用できるプロセッサの数が制限されることがあります。
max degree of parallelism
を 0
に設定すると、SQL Server では使用可能なすべてのプロセッサ (最大 64 プロセッサ) を使用できるようになります。 しかし、ほとんどの場合、この値は推奨されません。 並列処理の最大限度の推奨値の詳細については、このページの「推奨事項」セクションを参照してください。
並列プランの生成を中止するには、max degree of parallelism
を 1
に設定します。 1 つのクエリの実行中に使用できるプロセッサ コアの最大数を指定するには、値を 1 - 32,767 に設定します。 使用可能なプロセッサ数よりも多い値を指定すると、実際に使用可能なプロセッサ数が使用されます。 コンピューターにプロセッサが 1 つしか搭載されていない場合、max degree of parallelism
の値は無視されます。
並列処理の最大限度の制限はタスクごとに設定されます。 この設定は、要求ごとまたはクエリ制限ごとではありません。 つまり、並列クエリの実行中に、1 つの要求が MAXDOP
制限まで複数のタスクを生成でき、各タスクは 1 つのワーカーと 1 つのスケジューラを使用します。 詳細については、「スレッドおよびタスクのアーキテクチャ ガイド」の "並列タスクのスケジュール" に関するセクションを参照してください。
並列処理の最大限度のサーバー構成値をオーバーライドすることができます。
- クエリ レベルで、
MAXDOP
クエリ ヒントまたはクエリ ストア ヒントを使用します。 - データベース レベルで、
MAXDOP
データベース スコープ構成を使用します。. - ワークロード レベルで、リソース ガバナー ワークロード グループの
MAX_DOP
オプションを使用します。
インデックスを作成または再構築したり、クラスター化インデックスを削除するインデックス操作には、リソースを集中して使用するものがあります。 index ステートメントで MAXDOP
index オプションを指定することで、インデックス操作の並列処理の最大値をオーバーライドできます。
MAXDOP
値は、実行時にステートメントに適用され、インデックス メタデータには格納されません。 詳細については、「 並列インデックス操作の構成」を参照してください。
クエリおよびインデックスの操作だけでなく、このオプションは DBCC CHECKTABLE
、DBCC CHECKDB
、DBCC CHECKFILEGROUP
の並列処理も制御します。 トレース フラグ 2528 を使用して、これらのステートメントの並列実行プランを無効にすることができます。 詳細については、「トレース フラグ 2528」を参照してください。
SQL Server 2022 (16.x) では、並列処理の次数 (DOP) フィードバックという新機能が導入されました。これは、経過時間と待機時間に基づいて、反復するクエリの非効率な並列処理を特定することでクエリのパフォーマンスを向上します。 DOP フィードバックは、インテリジェント クエリ処理ファミリ機能の一部であり、反復するクエリに対する並列処理の最適化されていない使用に対応するものです。 DOP フィードバックの詳細については、「並列処理の次数 (DOP) のフィードバック」を参照してください。
Recommendations
SQL Server 2016 (13.x) 以降のバージョンでは、サービスの開始中、データベース エンジンの起動時に NUMA ノードまたはソケットあたり 8 個を超える物理コアが検出されると、既定でソフト NUMA ノードが自動的に作成されます。 データベース エンジンにより、同じ物理コアからさまざまなソフト NUMA ノードに論理プロセッサが配置されます。 次の表に示す推奨事項は、並列クエリのすべてのワーカー スレッドを同じソフト NUMA ノード内に保持することを目的としています。 これにより、ワークロードの NUMA ノード間でクエリのパフォーマンスとワーカー スレッドの分布が向上します。 詳細については、「ソフト NUMA (SQL Server)」を参照してください。
SQL Server 2016 (13.x) 以降のバージョンでは、max degree of parallelism
サーバーの構成値を構成する場合、以下のガイドラインを使用します。
サーバー構成 | プロセッサの数 | Guidance |
---|---|---|
単一の NUMA ノードを持つサーバー | 8 以下の論理プロセッサ | 論理プロセッサの数以下で MAXDOP を維持する |
単一の NUMA ノードを持つサーバー | 8 を超える論理プロセッサ |
MAXDOP を 8 に保つ |
複数の NUMA ノードを持つサーバー | NUMA ノードあたり 16 以下の論理プロセッサ | NUMA ノードあたりの論理プロセッサ数以下で MAXDOP を維持する |
複数の NUMA ノードを持つサーバー | NUMA ノードあたり 16 を超える論理プロセッサ | 最大値が 16 の NUMA ノードあたりの論理プロセッサ数の半分に MAXDOP してください |
前述の表の NUMA ノードは、SQL Server 2016 (13.x) 以降のバージョンで自動的に作成されるソフト NUMA ノード、またはソフト NUMA が無効になっている場合はハードウェア ベースの NUMA ノードを表します。
Resource Governor ワークロード グループに対して max degree of parallelism オプションを設定する場合は、これらと同じガイドラインを使用します。 詳細については、「CREATE WORKLOAD GROUP (Transact-SQL)」を参照してください。
SQL Server 2014 以前のバージョン
SQL Server 2008 (10.0.x) から SQL Server 2014 (12.x) では、max degree of parallelism
サーバーの構成値を構成する場合、以下のガイドラインを使用します。
サーバー構成 | プロセッサの数 | Guidance |
---|---|---|
単一の NUMA ノードを持つサーバー | 8 以下の論理プロセッサ | 論理プロセッサの数以下で MAXDOP を維持する |
単一の NUMA ノードを持つサーバー | 8 を超える論理プロセッサ |
MAXDOP を 8 に保つ |
複数の NUMA ノードを持つサーバー | NUMA ノードあたり 8 以下の論理プロセッサ | NUMA ノードあたりの論理プロセッサ数以下で MAXDOP を維持する |
複数の NUMA ノードを持つサーバー | NUMA ノードあたり 8 を超える論理プロセッサ |
MAXDOP を 8 に保つ |
Permissions
パラメーターなしで、または最初のパラメーターだけを指定して 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
を変更します。
オブジェクト エクスプローラーで、インスタンス名を右クリックし、[プロパティ] を選びます。
[詳細設定] ノードを選びます。
[並列処理の最大限度] ボックスで、並列プランの実行で使用するプロセッサの最大数を指定します。
Transact-SQL の使用
SQL Server Management Studio または Azure Data Studio を使ってデータベース エンジンに接続します。
標準バーから、 [新しいクエリ] を選択します。
次の例をコピーしてクエリ ウィンドウに貼り付け、 [実行] を選択します。 この例では、 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
詳しくは、「サーバー構成オプション」をご覧ください。
補足情報: max degree of parallelism オプションを構成した後
新しい設定は、サーバーを再起動しなくてもすぐに有効になります。
関連コンテンツ
- SQL データベースでのインテリジェントなクエリ処理
- クエリ処理アーキテクチャ ガイド
- DBCC TRACEON - トレース フラグ (Transact-SQL)
- クエリ ストアのヒント
- クエリ ヒント (Transact-SQL)
- USE HINT クエリ ヒント
- ALTER DATABASE SCOPED CONFIGURATION (Transact-SQL)
- affinity mask サーバー構成オプション
- サーバー構成オプション
- クエリ処理アーキテクチャ ガイド
- スレッドおよびタスクのアーキテクチャ ガイド
- sp_configure (Transact-SQL)
- インデックス オプションの設定
- 並列処理度数 (DOP) のフィードバック
- RECONFIGURE (Transact-SQL)
- パフォーマンスの監視とチューニング
- 並列インデックス操作の構成