SQL Server のクエリの問題を確認する際に、どのようなロックが取得されているかを確認することがあります。
ロックをクエリ (厳密にはセッション単位) で確認したい場合には拡張イベントを使うとわかりやすいと思います。
拡張イベントには、[lock_acquired] というイベントがあり、このイベントの情報を取得することで要求されたロックの情報を取得することができます。
拡張イベントではセッション ID でフィルタすることができますので、これで特定のセッションをフィルタリングすることができます。
この拡張イベントの情報を表示させると以下のような情報を取得することができます。
取得した情報はグループ化もできますので取得されたロックの傾向も簡単に確認できます。
SQL Server プロファイラで Lock:Acquired イベント クラス を取得することができますので、こちらからも確認できます。
# RDS for SQL Server では、拡張イベントが使用できないので、プロファイラ経由で取得することになるかと。
プロファイラは SPID でフィルタができますので、こちらからも特定のセッションについてロックを確認することができます。
ロックの競合の調査などをする場合、クエリ単位でどのようなロックが取得されているかを把握することが重要になってきますので、この辺の取得方法は知っていると便利かと。
山彦の開発日記(echo's developer dialy) でリブログ.
山彦
19 1月 14 at 14:10