ITエンジニアの成長ブログ

ITエンジニアとして行う勉強の発信&日々の生活で体験した楽しいことをゆるく発信

SQL Serverのロックエスカレーションの発生確認方法

今回は、SQL Serverのロックエスカレーションが発生しているかどうかを確認する方法を備忘として残したいと思います。

主に、以下の方の記事を参考にさせていただきました。
SQL Server / SQL Database パフォーマンスチューニング & トラブルシューティング シリーズ : SQL Server のロックの基本的な動作 at SE の雑記

ロックエスカレーションの発生確認方法

いくつか確認方法はあるようですが、DMVで確認できる方法が一番簡単なのでこちらを紹介します。

SELECT
  database_id,
  OBJECT_NAME(object_id),
  index_id,
  index_lock_promotion_attempt_count,
  index_lock_promotion_count
FROM
  sys.dm_db_index_operational_stats(
    DB_ID(N'データベース名'),
    OBJECT_ID(N'テーブル名'),
    NULL,
    NULL
  )


上記のなかで重要なのは、もちろん以下の2つのカラムです。

ロックエスカレーションの発生確認用カラム

「index_lock_promotion_attempt_count」がロックエスカレーションの成否にかかわらず試行した回数で、「index_lock_promotion_count」が実際にロックエスカレーションを試行した回数と読み取れます。

因みにこの回数は、SQL Serverのサービスを最後に起動してからの累積値となるようで、再起動したらレコードごと消えていました。だいたいどのくらい発生しているのかを把握したいときには、これで十分かなと思います。

ただ、実際にいつロックエスカレーションが発生したかどうかなどがわからないので、その場合は別の方法で確認する必要がありそうです。
(冒頭の参考にさせていただいた記事には、拡張イベントで取得できる旨記載がありました)