在SQLSERVER中每個會話,即每個查詢分析器窗口都會產生一個SQL進程,對於那些持續時間短的進程,它們轉瞬即失,而對於持續時間比較長的,我們需要希望查看它的運行狀態,就可以借助SQL提供的sp_who命令,下面是對它的具體介紹,主要選自MSDN.
sp_who [ [ @loginame = ] 'login' | session ID | 'ACTIVE' ]
你可以在sp_who后面加你的SPID號(sessionID),登陸名,線程狀態等
下面對status執行狀態作一個簡單的說明,選自MSDN
background:會話正在運行一個后台任務,例如死鎖檢測。
rollback: 會話具有正在處理的事務回滾。
pending: 會話正在等待工作線程變為可用。
runnable: 會話的任務在等待獲取時間量程時位於計划程序的可運行隊列中。
spinloop: 會話的任務正在等待調節鎖變為可用。
suspended: 會話正在等待事件(如 I/O)完成。
注意:如果你的代碼處理數據比較大,SQL會創建子線程進行並行處理,子線程的標示為ecid。
別外,如果希望查看SQL進程的詳細信息,可以使用下面代碼
SELECT * FROM sys.sysprocesses
查看被鎖住的對象,可以使用下面代碼
SELECT * FROM sys.syslockinfo
如果希望查看指定會話(SQL進程)的語句(從客戶端發過來的SQL語句),可以使用下面語句
dbcc inputbuffer(Session_ID)
如果希望查看正在被阻塞的語句(sysprocesses的blocked),可以使用下面語句
dbcc inputbuffer(Blocked)