MAXDOP」とは?

リー・ピーターソン 4 months ago 2分で読める
Elevenlabs Text to Speech AudioNative Player を読み込んでいます...

Triumph社は最近、データベース全体のCPUとWorkerの使用率が非常に高いRockインスタンスのトラブルシューティングに携わりました。最初の兆候は、チェックインのパフォーマンスが遅く、チェックイン時に出席を保存できないことでした。

私たちはあらゆる手を尽くして、いつもの容疑者(ジョブ、データ・ビュー、レポートなどをチェックした)をテストしましたが、結果は出ませんでした。歯ぎしりや泣き喚き(「調査」や「トラブルシューティング」として知られている)の後、SQL Serverの「最大並列度」-「MAXDOP」という設定に行き当たりました。

並列処理は、SQL Serverが複数のCPUコアを使用できる場合に登場します。ある種のクエリは "並列化 "することができ、つまり、クエリを処理するために複数のコアを同時に使用することができます。例えば、指定した日付範囲内のレコードについてテーブルをスキャンするような場合である。SQL Serverクエリ・プロセッサはクエリを分割し、異なるコアにチャンクを割り当てることができます。この利点は、クエリの速度が向上する可能性があることです。

場合によっては、並列化されたクエリがすべてのコアを使い果たし、他のクエリからリソースを奪ってしまうこともある。 

Microsoftは、Azure SQL Databaseの最大並列度(MAXDOP)の設定という記事を公開し、並列性とクエリが消費できるコア数を制限する設定について少し説明している。

興味深いことに、この記事には、2020年9月以前のAzure SQLデータベースのMAXDOPはデフォルトで "0"、つまり "無制限 "に設定されていたことを示すメモが含まれている。同月、デフォルト設定が "8 "に変更された。マイクロソフトによると、「このデフォルトは、過度の並列処理によるパフォーマンス問題を防ぐのに役立った」とのことだ。

問題のインスタンスでMAXDOPの設定を "0 "から "8 "に変更すると、リソースの使用量が劇的に減少した。

以下は、変更前の日曜朝のチェックイン時のデータベース・パフォーマンスのスクリーンショットである:

ビフォア.png

そして変更後のパフォーマンス:

After.png

この設定は、1つ以上のコアを持つインスタンスにのみ適用されます。低階層の Azure データベースで利用可能なコア数は 1 つか 2 つである可能性が高く、この設定はほとんど効果がありません。高階層のデータベースには数個のコアがあり、MAXDOPを利用可能なコアの半分などに設定すると改善する可能性があります。多くのコアを持つ大規模なインスタンスで最も効果があります。私たちの経験では、新しいデフォルト設定の8は大規模インスタンスでは問題ないと思われます。別の設定が有益かどうかを判断するには、実験が役立つでしょう。

この設定は、SSMSまたはAzure Data Studioでアクセスできるデータベースのプロパティで行います:

MAXDOP_設定.png


執筆 トライアンフのテクニカル・ソリューション・プロバイダー

仕事を始めよう

あなたのRock RMSのアイデアを形にしてみませんか?

私たちがお手伝いします。

お問い合わせ