web-dev-qa-db-ja.com

理想的なMAXDOPとCPU-並列クエリをトレースする方法は?

サードパーティのデータベースサーバーの理想的なCPU数と最大並列度について、当社で議論が行われています。

サーバーには12個のCPU、32GB RAM、すべてのデータベースサイズは合計で30GB未満になるため、すべてメモリに収まります(すべてのテーブルからselect *を実行してこれを強制しようとしました)。特定の給与計算日では、CPUは数秒間100%に最大化されます。

MAXDOPは元々デフォルトの0に設定されていましたが、後でいくつかの「ベストプラクティス」の記事に基づいて8に変更しました。ただし、ベンダーはこれを1(並列処理なし)に変更することを提案していますが、他のベンダーは4に変更することを提案しています。これにより、1つの暴走クエリがほとんどのCPUを占有しません。

クエリで実際に使用されているCPUの数を知りたいのですが。 Profiler にDegree ofParallelismイベントがあります。 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.

「シリアルで実行される並列プラン」とはどういう意味ですか?
トレースに0x01000000がたくさんあり、0x08000000がいくつかあります。 1つのクエリがCPUを占有しているかどうか、およびそれを4に減らすことが役立つかどうかをどのように判断できますか?

2
d-_-b

変更する5つのSQL Server設定への投稿:

http://www.brentozar.com/archive/2013/09/five-sql-server-settings-to-change/

次のことを提案します。

  1. 最大並列度:並列処理を単一のCPUソケット内の物理コアの数に制限します。
  2. 並列処理のコストしきい値:50から始めて、必要に応じて調整します。

また、シリアルで実行されている並列プランは、並列プランが作成されたにもかかわらず、並列で実行するために必要なリソースが利用できないことを意味します。したがって、プランは、完了するまで並列プランのセクションを順次実行します。

1
RLF