サードパーティのデータベースサーバーの理想的な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に減らすことが役立つかどうかをどのように判断できますか?
変更する5つのSQL Server設定への投稿:
http://www.brentozar.com/archive/2013/09/five-sql-server-settings-to-change/
次のことを提案します。
また、シリアルで実行されている並列プランは、並列プランが作成されたにもかかわらず、並列で実行するために必要なリソースが利用できないことを意味します。したがって、プランは、完了するまで並列プランのセクションを順次実行します。