並列処理のベストプラクティス


9

並列処理の設定に関する一般的なベストプラクティスは何ですか?SQL Serverはデフォルトで0使用可能なすべてのプロセッサを使用することを知っていますが、どのような場合にこのデフォルトの動作を変更しますか?

OLTPワークロードの場合は並列処理をオフにする(maxdopをに設定する1)必要があることをどこかで読んだことを覚えています(この記事を探す必要があります)。なぜあなたがこれをするのか、私には完全には理解できません。

maxdopをいつSQL Server(0)まで維持しますか?いつ並列処理(1)をオフにしますか?maxdopを特定の数のプロセッサに明示的に指定するのはいつですか?

並列性の原因は何ですか?

回答:


11

通常、並列処理を無効にしたくないので、並列処理は管理タスクに対しても無効になります。最善の策は、インデックスを追加または修正するか、スキーマを完全に変更することによって、並列処理を引き起こしているクエリを修正することです。


更新された質問に基づいて...

データベースやスキーマを制御できず、単一のクエリでシステム全体を引き継ぐことを望まないため、ベンダーが構築したアプリケーションのMAXDOPを1に変更する人もいます。

個人的には、いくつかのまれなケースを除いて、常にMAXDOPを0に保ちます。

並列処理は、事前に設定された設定(並列処理設定のコストしきい値)を超える実行コストを持つ実行プラン内の単一の操作によって発生します。これが発生すると、SQL Serverは並列処理を開始し、プロセスを高速化するために要求をマルチスレッド化できます。並列処理のコストしきい値のデフォルト値は5です。多くのOLTPプラットフォームでは、並列処理が非常に負荷の高いクエリに対してのみ有効になるように、最大​​値を30または40に増やす必要があります。


4

SQL Serverを使用して常に並列処理設定をオフにしたり変更したりする必要があるとは思いませんでした(最後のミレニアム、SQL Sever 6.5)。

@StanleyJohnsの回答に続いて...
短くて鋭いクエリを含むOLTPシステムは、コストのしきい値(「並列処理のコストのしきい値」)に到達することはないため、問題になりません。並列処理されるクエリがある場合、証明されていないものに基づいてそれを制限する理由

純粋なOLTPシステムもまだ見たことがありません。極端な場合はあるかもしれませんが、平均的なシステムでも報告されています。日中か夜間か。これらのクエリは、並列処理されて恩恵を受ける可能性が高くなります。

現在、非常に多くのCPUコアが利用可能であるため、違いを測定して気づくことができれば、グローバルな「並列処理の最大度合い」を設定するケースが間違いなくあります。

私が言ったように、私の提案は何もしないことです。@mrdennyに似ていますが、「純粋なOLTPシステムのようなものはありません」を含めます。

それを言うと、BIOSレベルでハイパースレッドコアを無効にすることには多少のメリットがあるかもしれませんが、それは別の質問です...

また、ご覧ください


3

並列処理の原因は何ですか?:という設定がありcost threshold for parallelismます。このしきい値を超えると、並列処理が使用されます(前提条件が満たされている場合)。

OLTPシステムの性質は、多数の迅速で短いトランザクションを持つことです。並列処理を使用すると、クエリが並列処理されるように分割され、返される前につなぎ合わされるため、クエリの処理時間が長くなることがあります。したがって、maxdopを1に設定するための提案が表示されます。

maxdopを1に設定する利点の1つは、デフォルトで並列処理が無効になっていることですが、を使用してクエリレベルで有効にすることができますquery hints

大きな結果セットが返されるデータウェアハウスシステムまたはOLAPシステムの場合、並列処理を使用してクエリを分割することには利点があります。これにより、クエリは利用可能なコアを利用してクエリ処理時間を削減できます。


2

実行に数時間かかる複雑なクエリが複数のプロセスに分割されるのを見ました。通常、これはsp_who2で同じspidを持つ複数のエントリとして確認できます。

これをmaxdop 1に変更すると、クエリは1分未満で実行されます。

ここでの教訓は、並列処理に関しては、エンジンが常に正しいとは限らないということです。


0

4コアのサーバーもあれば、8コアのサーバーもたくさんあります。OLTPシステムのユーザーのCPUでの待機(およびタイムアウトの問題)を回避するために、並列処理(MAXDOP)を1に設定することをお勧めします。コアが少ないOLAPサーバーまたはレポートサーバーの場合は、MAXDOPを2に設定し、コストしきい値を30(シナリオではこれよりも高いか少し低い場合があります)に設定して、最も重いクエリのみが並列処理を使用するようにすることをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.