利用 sys.dm_exec_requests 找到執行中的程序


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

沒有留言:

技術提供:Blogger.
回頂端⬆️