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

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

SQL ServerでセッションIDから実行中のSQLを確認する方法

先日、以下の記事でリアルタイムにブロッキングの状態を見るコマンドを紹介しました。
SQL Serverでリアルタイムにブロッキングの状態を見る - ITエンジニアの成長ブログ


上記のコマンドの結果を見ることで、あるセッションにブロッキングが起きていてことがわかりますが、実際にそれがどのようなSQLによって、ブロッキングが発生しているのかという中身を知ることができませんでした。

そこで、その中身を知るためのコマンドを調査しましたので、今回もここにメモ程度に残します。

早速ですが、コマンドは以下の通りです。「DBCC INPUTBUFFER」と呼ばれるデータベース管理コマンドを使います。
DBCC INPUTBUFFER (Transact-SQL) - SQL Server | Microsoft Learn

たとえば、あるセッションで以下のようなSELECT文を実行したとします。このセッションのセッションIDは、56になりますね。

あるセッションのSELECT実行結果

そこで別のセッションで、以下のように上記で取得したセッションIDを引数に「DBCC INPUTBUFFER」コマンドを実行します。

DBCC INPUTBUFFER実行結果

上記のとおり、EventInfoカラムにセッションID=56のSQL実行結果を取得することができました。とても手軽に確認することができるので、今度何かしらで調査する際には使えるかもしれません。

ちなみに、この「DBCC INPUTBUFFER」コマンドで取得できるSQLの実行結果は、SQL Serverインスタンスに最後に送信されたステートメントを表示します。そのため、同じセッションで何度もSQL文を実行しているようなケースでは最後の実行SQL文しかわからないので、それは頭に入れておいたほうが良さそうです。

今回はこの辺で失礼いたします。最後までお読みいただきありがとうございました。