MSDN 網站上的 sys.dm_exec_requests 說明文件有提供幾個使用範例,包括如何透過這個 DMV(Dynamic Management Views)來取得執行中的 SQL 指令、如何找出所有的 locks、以及目前被卡住(blocked)的操作。MSDN 文件裡面有提供的,這裡就不重複貼了。
底下的指令可以找出目前執行中的預儲程序:
Use YourDB SELECT * FROM sys.dm_exec_requests cross apply sys.dm_exec_query_plan(plan_handle) where objectid=OBJECT_ID('YourSchema.YourProc')
其中 OBJECT_ID 函式是用來獲取物件的識別碼,'YourSchema' 可以是你的資料庫名稱,或者也可以省略。
找到目前執行中的預儲程序之後,你可以從查詢結果獲得 session_id、sql_handle、blocking_session_id、transaction_id 等資訊,再視狀況採取進一步動作。比如說,某個預儲程序跑了十幾二十分鐘都還沒跑完,把系統整個拖慢了,就可以將它所屬的 session 整個 KILL 掉。
sys.dm_exec_requests 的 session_id 欄位也就是 SPID(Server Process ID)。如果想要立刻終止某個連線,只要知道 SPID,就可以用 KILL 指令將它終結掉。例如:
KILL 84; GO
沒有留言: