先日、以下の記事でリアルタイムにブロッキングの状態を見るコマンドを紹介しました。
SQL Serverでリアルタイムにブロッキングの状態を見る - ITエンジニアの成長ブログ
上記のコマンドの結果を見ることで、あるセッションにブロッキングが起きていてことがわかりますが、実際にそれがどのようなSQLによって、ブロッキングが発生しているのかという中身を知ることができませんでした。
そこで、その中身を知るためのコマンドを調査しましたので、今回もここにメモ程度に残します。
早速ですが、コマンドは以下の通りです。「DBCC INPUTBUFFER」と呼ばれるデータベース管理コマンドを使います。
DBCC INPUTBUFFER (Transact-SQL) - SQL Server | Microsoft Learn
たとえば、あるセッションで以下のようなSELECT文を実行したとします。このセッションのセッションIDは、56になりますね。
そこで別のセッションで、以下のように上記で取得したセッションIDを引数に「DBCC INPUTBUFFER」コマンドを実行します。
上記のとおり、EventInfoカラムにセッションID=56のSQL実行結果を取得することができました。とても手軽に確認することができるので、今度何かしらで調査する際には使えるかもしれません。
ちなみに、この「DBCC INPUTBUFFER」コマンドで取得できるSQLの実行結果は、SQL Server のインスタンスに最後に送信されたステートメントを表示します。そのため、同じセッションで何度もSQL文を実行しているようなケースでは最後の実行SQL文しかわからないので、それは頭に入れておいたほうが良さそうです。
今回はこの辺で失礼いたします。最後までお読みいただきありがとうございました。