在SQL Server中有幾種方法可以找到活動的 SQL 連接,讓我們看看一些使用 T-SQL 查詢的簡單快捷的方法,
SP_WHO
SP_WHO 是 SQL Server 內置的系統存盤程序, 其他方法相比,SP_WHO 將具有最少的列,但是一種快速列出活動連接的方法,
以下是在 SQL Server Management Studio 中的執行示例:
EXEC SP_WHO

具體的欄位解釋請參閱官方檔案 SP_WHO
其中比較重要的列是:
- spid: 會話ID
- loginname: 登錄賬號
- blk: 阻塞行程的會話ID(如果存在),否則,此列為零, 可以使用該列排查死鎖
SYS.SYSPROCESSES
另一種查找活動 SQL 連接的絕妙方法是使用系統兼容性視圖 SYS.SYSPROCESSES
此視圖有很多列,其中包含很多資訊,這些資訊有助于您找出活動的 sql 連接,尤其是當您想要查找被阻塞的行程時,但是,這是向后兼容的視圖,不建議使用,因為未來的版本可能會洗掉它
以下是在 SQL Server Management Studio 中的執行示例:
SELECT * FROM SYS.SYSPROCESSES

具體的欄位解釋請參閱官方檔案 SYS.SYSPROCESSES
SYS.DM_EXEC_SESSIONS (建議使用)
SYS.DM_EXEC_SESSIONS 是替代舊系統表 sysprocesses 的動態管理視圖之一,SYS.DM_EXEC_SESSIONS 的優點是它的列 is_user_process ,使用此列,您可以輕松過濾掉系統行程,
以下是在 SQL Server Management Studio 中的執行示例:
SELECT * FROM SYS.DM_EXEC_SESSIONS where is_user_process = 1

具體的欄位解釋請參閱官方檔案 SYS.DM_EXEC_SESSIONS
用于查找 SQL Server 中的死鎖的 T-SQL 查詢
下面是我用來快速查找死鎖的查詢,此陳述句基于SYS.DM_EXEC_REQUESTS 動態管理視圖,在此陳述句中,blocking_session_id 列為您提供了阻塞連接的 session_id,而 wait_type 列為您提供了導致 deadlock 的 等待型別,獲得blocking_session_id 后,您可以使用 SYS.DM_EXEC_SESSIONS 來獲取有關會話或連接的更多詳細資訊,
SELECT
session_id,
start_time,
[status],
command,
blocking_session_id,
wait_type,
wait_time,
open_transaction_count,
transaction_id,
total_elapsed_time,
Definition = CAST(text AS VARCHAR(MAX))
FROM
SYS.DM_EXEC_REQUESTS
CROSS APPLY sys.dm_exec_sql_text(sql_handle)
WHERE blocking_session_id != 0

上圖我們得到了正在發生阻塞的會話資訊和所執行的SQL陳述句(Definition)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/499441.html
標籤:SQL Server
下一篇:什么是回表,怎么解決?
