web-dev-qa-db-ja.com

プロファイラーのMaxdop

Maxdop = 1が配置されているSQLServer 2008 R2インスタンスに対してサーバー側のトレースを実行し、次にreadtrace.exeを介してトレースを実行して、再生用のRMLファイルを取得するとします。

リプレイは、Maxdop =1のインスタンスレベルの設定を保持して、どのクエリもmaxdop = 0サーバーで並列に実行されないようにしますか?

トレースを見ると、EventSubClassに「1-Select」が付いた「DegreeofParallelism」というイベントがたくさんあります。これにより、クエリが別のインスタンスに対して再生されるときに、クエリにmaxdop = 1が強制されますか?

3
Peter

Degree of Parallelismイベントは、実際には、EventSubClassではなく、BinaryData列にクエリの並列処理を記録します。 ここ を参照してください:

0x00000000, indicates a serial plan running in serial.
0x01000000, indicates a parallel plan running in serial.
>= 0x02000000 indicates a parallel plan running in parallel.

私の簡単なテストから、RMLまたはトレース再生はDegree of Parallelismイベントを強制しません。これは、サーバーレベルのmaxdopまたはローカルのMAXDOPクエリヒントによって上書きされる可能性があるため、これは理にかなっています。 SQL Serverは通常、使用可能なリソースに応じて、クエリの実行時に並列化するかどうかも決定します。このイベントも収集されますafterクエリが開始され、SQL:BatchStartedのように、リプレイモードで処理を実行するイベントの1つではないようです。たとえば、リプレイトレースをステップ実行した場合、何も発生しません。このイベントで発生します。

HTH

2
wBob