高PAGELATCH_ *およびWRITELOG待機。それらは関連していますか?


11

非常に高いPAGELATCH_EXおよびPAGELATCH_SH待機タイプと、高いWRITELOG待機が発生しています。PAGELATCH待機の原因となっているクエリを診断しました。IDENTITY値で定義されたビジーなクラスター化された主キーへの挿入率を下げることで、それらを排除できます。この現象は最終ページ挿入ラッチ競合として知られていると理解しています。

ただし、私の質問は、新しいレコードが挿入されたとき、SQL Serverがバッファーページで排他的なPAGELATCH_EXを取得し、レコードをバッファーページに挿入して、トランザクションログにレコードを書き込み、詳細なhttps://として排他的なPAGELATCH_EXを解放することです。 www.microsoft.com/en-ie/download/details.aspx?id=26665ページ24.または、詳細な「高度に同時実行されているINSERTワークロードでのPAGELATCH競合の解決-背景情報SQLCATのガイド:リレーショナルエンジン

レコードがラッチメカニズムの外部のログに書き込まれる場合、PAGELATCH待機が高くなる原因として、ディスクへの遅い書き込みを除外できます。しかし、レコードがログに記録されるまで強化されるまでラッチが保持されている場合は、おそらくWRITELOGを考慮する必要があります。

また、複数の非クラスター化インデックスがあると、PAGELATCH_ *ラッチがより長く保持されます。つまり、テーブルにクラスター化されており、複数の非クラスター化インデックスがラッチに追加され、各インデックスバッファーページに同時に解放されますか?

更新1 confio-sql-server-writelog-waitスライド2と一般的なWALアーキテクチャを 読んだ後。両方のホワイトペーパーで説明されている「行が変更されたログエントリを記録する」手順は、SQL Serverがディスクではなくトランザクションログキャッシュに変更を記録することを指していることを理解しました。トランザクションが完了するか、バッファがいっぱいになると、すべてのレコードがすぐにディスクにフラッシュされます。


1
この右この瞬間に非常によく似た問題..を見てみると
デイブローレンス

問題を引き起こす可能性のある高いVLFを調べましたか?
Kin Shah

@Kinは、PAGELATCH_EXラッチを開いたままにし、ラッチの競合を引き起こしている、ディスクへのログのフラッシュが遅いという意味ですか?
ピクセル化された2015

SQL Serverの実装がページラッチの下でログレコードを生成する必要がある理由はありません。なぜ彼らはこのようにするのでしょうか?ありえない。また、ログの書き込みがパッチラッチの下で行われた場合、WRITELOGの待機はほとんどありません。一度に取得できる待機タイプは1つだけです。
usr

回答:


1

ただし、私の質問は、新しいレコードが挿入されたとき、SQL Serverがバッファーページで排他的なPAGELATCH_EXを取得し、レコードをバッファーページに挿入し、レコードをトランザクションログに書き込んでから、排他的なPAGELATCH_EXを解放することです。

ラッチは、ページがメモリ内にあるときにのみページの物理的な整合性を保護するため、ページがメモリ内にあるときにラッチが取得されることに注意してください。レコードが挿入されていて、そのページをフェッチする必要があるとします。最初に、ページがロックされてメモリに読み込まれ、次にページがラッチされて情報が書き込まれます。この後のプロセスは

  • ログレコードを生成する

  • ログレコードのページLSNと一致するようにページLSNを更新する

  • データの変更(ページの汚れ)

  • リリースラッチ

  • トランザクションの開始をコミット

  • コミットのFlushToLSN

  • ロックを解除する

  • トランザクションのコミットが完了しました

上記の手順の詳細と説明については、Bob DorrのI / Oプレゼンテーションブログをご覧ください。

Pagelatch *の待機はI / O以外の待機であり、割り当ての競合のために、これらの待機が目立つようになることがほとんどです。私の直感は、それがどうやって何かをしなければならないということtempdb is configuredです。tempdbはどのように構成されていますか?tempdbデータファイルはどのくらい存在しますか?自動成長とサイズが同じであることを確認してください。新しいページが作成されると、GAM、SGAM、PFSなどのシステムページが更新またはアクセスされる必要があり、SQL Serverがこれらのページへのアクセスで競合を検出すると、このような待機が発生します。


こんにちは@Shanky。sys.dm_os_waiting_tasks.resource_descriptionと、DBCC PAGEおよびPAGELATCH_ *のタイプを組み合わせたものに基づいています。tempDBは除外しました。Bob Dorrによる一連のイベントに基づいて、「ログレコードの生成」ステップがラッチメカニズム内で完了したように見えますか?
ピクセル化された2015

3
どちらも相互に排他的なイベントです。ログファイルへの書き込みは、実際にトランザクションをコミットする前にWALプロトコルに従ってSQL Serverをラッチして情報をログに書き込むこととは関係ありません
Shanky
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.