web-dev-qa-db-ja.com

MAXDOP = 1、クエリヒントと並列処理のコストしきい値

インスタンスのMAXDOPが1に設定されていて、クエリヒントを使用して特定のクエリを並列化できる場合、SQLは実際に並列化するかどうかを決定するために並列処理のコストしきい値を使用していますか?

this link は、MAXDOPが1の場合、CTFPが無視されることを示唆していますが、この特定の情報を掘り下げることはできませんでした。これは、コストに関係なく、クエリヒントなしでリクエストがないため意味があります、MAXDOPが1の場合に並列になります。

これら2つのリクエストの予想される動作を誰かに教えてもらえますか?

例1:

Instance Maxdop: 1 
CTFP: 50 
Query hint: Maxdop=2 
Query cost: 30

例2:

Instance Maxdop: 1
CTFP: 50
Query hint: Maxdop=2
Query cost: 70
11
Martin Bansey

インスタンスのMAXDOPが1に設定されていて、クエリヒントを使用して特定のクエリを並列化できる場合、SQLは実際に並列化するかどうかを決定するために並列処理のコストしきい値を使用していますか?

簡単な答え:yes

細部

ここではいくつかの別々のことが行われていますが、それらを分離することが重要です。

  1. クエリに有効な最大並列度が利用可能とは何ですか?

    これへの貢献者は(おおまかに重要な順に):

    • リソースガバナーMAX_DOP設定
    • クエリヒントMAXDOP設定
    • max degree of parallelismインスタンス構成オプション

    詳細は サーバーの「並列処理の最大度数」設定、リソースガバナーのMAX_DOPおよびクエリヒントMAXDOP-SQL Serverのどれを使用すればよいですか? Microsoft SQL ServerカスタマーサービスのシニアエスカレーションエンジニアであるJack Liサポート。以下の表は、そのリンクから複製されています。

    parallelism table

  2. クエリプランは並列処理を使用しますか?

    SQL Serverクエリオプティマイザーは常にシリアルプランを最初に検索します*。

    次に、

    • さらなる最適化は正当化されます。 および
    • 最良のシリアルプランのコストがcost threshold for parallelism構成値


    ...オプティマイザは並列プランを見つけるために試行します。

    次に、

    • 並列プランが見つかりました(つまり、可能です)。 および
    • パラレルプランのコストは、最良のシリアルプランよりも少ない


    ...並行計画が作成されます。

注:cost threshold for parallelismは、オプティマイザが並列プランを探すかどうかにのみ影響します。並列プランがキャッシュされると、CTFP設定に関係なく、再利用時に(スレッドが使用可能である限り)並列処理を使用して実行されます。


インスタンスmaxdop 1とクエリヒントmaxdop 2の両方の例で、有効なDOPは2です。並列プランが選択されている場合、DOPが使用されます2。

例1

CTFPが50で、最も安いシリアルプランが見つかったコストが30の場合、SQL Serverはしない並列プランを見つけようとします。シリアル計画が作成されます。

例2

CTFPが50で、最も安いシリアルプランが見つかったコストが70の場合、SQL Serverはを試してみます並列計画。このプラン(見つかった場合)のコストが70(シリアルプランのコスト)未満の場合、パラレルプランが作成されます。


クエリ最適化の最終結果は常に単一のキャッシュされたプランです:シリアルまたはパラレル。オプティマイザーは、search0(TP)およびsearch1(QP)フェーズでシリアルプランのみを検出します。

それはmayそして(記述されているように)並列プランを作成する要件でsearch1を再実行します。次に、これまでの最良の全体計画コストに基づいて、シリアルとパラレルのどちらかを選択します。最適化がsearch2(完全最適化)に移行する場合、その選択は拘束力があります。最適化の各フェーズでは多くの選択肢が考慮されますが、ステージからの出力は常に、単一または最良の単一または最良の計画です。

私はこれについていくつか書きました 神話:SQL Serverはすべての並列プランでシリアルプランをキャッシュする

20
Paul White 9

例1インスタンスMaxdop:1 CTFP:50クエリヒント:Maxdop = 2クエリコスト:30

MAXDOPクエリヒントは、インスタンス全体の最大並列度設定をオーバーライドしますが、CTPFが50でクエリコストが30であるため、シリアルプランの場合があります。

例2インスタンスのMaxdop:1 CTFP:50クエリヒント:Maxdop = 2クエリコスト:70

ここでも、MAXDOPヒントが存在するため、並列処理の最大次数は2と見なされますが、CTFPは50と見なされ、可能であれば、Paulが並列実行される可能性があるクエリが実行されます。

インスタンスのMAXDOPが1に設定されていて、クエリヒントを使用して特定のクエリを並列化できる場合、SQLは並列処理のコストしきい値を使用して、実際に並列化するかどうかを決定しますか?

MAXDOPヒント は、最大の並列度のインスタンス全体の設定をオーバーライドします。

MAXDOPヒントdocs.Microsoftからの引用

MAXDOP番号適用対象:SQL Server 2008〜SQL Server 2017。

このオプションを指定するクエリのsp_configureおよびリソースガバナのmax degree of parallelism構成オプションをオーバーライドします。 MAXDOPクエリヒントは、sp_configureで設定された値を超える可能性があります。 MAXDOPがリソースガバナーで構成された値を超える場合、データベースエンジンはリソースガバナーのMAXDOP値を使用します。

2
Shanky