小物SEのメモ帳

IT関係の試したことや調べたことの備忘録

【SQL server】sp_who2について

SQL Serverの性能情報を取得するうえで、簡単にいろいろな情報を収集できるシステムストアドプロシージャであるsp_who2について、改めて内部を確認してみました。
※sp_who2はundocumentedなシステムストアドプロシージャであるため、変更されている恐れがあります。

f:id:utiowa:20160922163316p:plain

まずは、内容を以下クエリで確認します。

sp_helptext 'sp_who2'

f:id:utiowa:20160922163547p:plain

基本的にはsysprocesses_exから情報を取得しているようです。
このような名前のテーブルやビューは見つからないため、内部用のテーブルでしょうか。。。
同じようなストアドを作ることもできなさそうに見受けられるため、システムストアドプロシージャからのみ参照できるのでしょうか。。

似たようなテーブルとしてsysprocessesが存在し、こちらとほぼ同様な内容を取得していると思われます。
ちなみにsysprocessesに関しても、SQL server2000までの下位互換ビューのため、直接情報採取する場合は、以下を使用してください。
sys.dm_exec_connections
sys.dm_exec_sessions
sys.dm_exec_requests

※詳しくは以下を参照してください。
https://technet.microsoft.com/ja-jp/library/ms187997.aspx


また、環境によっては本番環境で自由に実行できるクエリに制限があり難しいかもしれませんが、
MSのtechnetにはさらに有益な情報を出力できるsp_who3も存在します。(MS標準で用意されているストアドとは異なるため、使用は自己責任で)
こちらはさらに、SQLステートメントなども出力できるため、使用できる方は使ってみてもいいと思います。
https://gallery.technet.microsoft.com/SPWHO3-74fb1c35


話がそれてしまいましたが、sp_sho2の実行結果サンプルは以下となります。

f:id:utiowa:20160922163649p:plain

どのような実行内容であったか詳細を知りたい場合は、上記の結果からSPIDを選び、
以下で検索します。

DBCC INPUTBUFFER(<SPID>)

f:id:utiowa:20160922163729p:plain

以上のようなことはSSMSの利用状況モニターでも確認できます。
「プロセス」ペインを開きます。

f:id:utiowa:20160922163747p:plain

対象を選択して、右クリック⇒詳細を選択します。

f:id:utiowa:20160922163759p:plain

実行しているSQLが確認できます。また、強制終了を実行できます。
(コマンドで実行する場合は、Kill でしょうか。)

f:id:utiowa:20160922163811p:plain

以上のような内容は、パフォーマンス低下時の緊急時に確認が必要だったりするので、頭に入れておくと安心ですね。