SQL Server の待ち事象を確認するための DMV として頻繁に使うものとして以下の 2 種類があります。
この 2 種類の DMV の関連性について少し触れてみたいと思います。
wait_stats の中では様々な待ち事象を確認することができますが、latch_stats との関連を見る場合には以下の 2 種類に注目をします。
- バッファーラッチ (Buffer Latch)
- ノンバッファーラッチ (Non-Buffer Latch)
バッファーラッチはメモリ上のデータを操作する場合などに発生するラッチとなり、一般的には以下の待ち事象が該当するといわれています。
- PAGEIOLATCH_xx
- PAGELATCH_xx
ノンバッファーラッチは上記以外のラッチとなり、以下の待ち事象が該当します。
- LATCH_xx
wait_stats の観点から見た場合には、ここまでの情報を取得することができますが、ノンバッファーラッチについては LATCH_xx でまとめられています。
ノンバッファーラッチは実際には単一の待ち事象ではなく、様々な種類が存在しています。
LATCH_xx の詳細を見るために使用するのが、sys.dm_os_latch_stats となります。
latch_stats には BUFFER という待ち事象があり、これは wait_stats のバッファーラッチの集計値とほぼ一致するかと思います。
2 つの DMV の関連性としては以下のような関係が成り立ちます。
- sys.dm_os_wait_stats の LATCH_xx の詳細を見るためには、sys.dm_os_latch_stats の BUFFER 以外を確認
- sys.dm_os_latch_stats の BUFFER の詳細を見るためには、sys.dm_os_wait_stats の LATCH_xx 以外を確認
どちらの DMV をベースにするかによって、詳細の見方が変わってくるのですが、待ち事象を見る場合には二つセットで取得するのが一般的ですので、同一タイミングで情報を取得してどのように読み解けばいいかを知っておくと便利かと。