SQLサーバーが1と構成されたMAXDOPの間にあるコアを使用しない方法はありますか?
たとえば、maxdopが8の場合、SQLで3を使用することは可能ですか?リソースの管理、ヒント、およびその他の制御メカニズムが整っていないとしましょう。
それとも、シングルスレッドの場合は1、並列化の場合は8という単純なものですか?
_MAXDOP = 8
_を設定した場合、これは並列処理の程度がプロセスの8コアになるという意味ではありません。これは、8コア以下がプロセスに使用されることを意味します。
その設定では、1コアから最大8コアまでしか使用できませんでした。これはすべて、サーバーで複数の長いプロセスが実行されている場合など、他の多くの使用要因に依存します。 SQL Serverは、実行中のすべてのプロセスが非常に定期的にCPU時間を割り当てるように、プロセスを管理しようとします。
https://www.brentozar.com/archive/2014/11/many-cpus-parallel-query-using-sql-server/
ブレントの投稿は、ポールホワイトがケンドラリトルの投稿を正しいものとして監査したことも確認しています。 (さらに検証が必要な場合に備えて。)
再びポールホワイトから http://www.sqlservercentral.com での議論から:
インスタンス全体の
MAXDOP
設定は、可能な最大並列度を設定します。ゼロ(デフォルト)の設定により、SQLServerはプロセッサコアと同じ数のスレッドを使用できます。を使用するように構成されています。並列処理のコストしきい値はオプティマイザーによってのみ使用されます。コストしきい値が5に設定されている場合、オプティマイザーが並列プランの代替を探す前に、クエリの推定コストは少なくとも5である必要があります。
そのような場合、クエリの_MAXDOP 8
_設定はコストしきい値を超えてはならないため、並列プランは作成されません。
1より多くMAXDOP
設定未満のリソースを特に管理する必要があるプロセスがある場合は、OPTION (MAXDOP 4)
(例として)またはその他の設定を追加できます。実行しているプロセスに適合します。
したがって、いくつかの選択肢があり、1コア、8コア、または「すべての」プロセッサだけにとらわれることはありません。
@ HumpreyCogay-BobDorrが内部について素晴らしい記事を書いています
ちなみに、MAXDOPはコアの数を直接制御しません。クエリプランのオペレーターごとに使用されるスレッドの数を制御します。