天天看點

SqlServer如何檢視死鎖的程序

今天測試同時運作将增量資料導入增量資料庫對應的表并同步到全量資料庫中,發現其中一個程序卡着不懂了。

在SQLServer自帶的manage 用戶端的活動和螢幕中看到了死鎖

活動螢幕打開方式:

SqlServer如何檢視死鎖的程式

在程序中的頭阻塞顯示了1,說明有死鎖。

SqlServer如何檢視死鎖的程式

這個工具, 用來檢視一些當時的運作狀态.和幹掉程序.

但是這個工具隻能檢視部分哪個表被鎖住了. 也無法知道是哪個程序和sql導緻了鎖程序. 隻能檢視一些其它的資訊.

至于如何檢視死鎖的表, 需要用到下面的sql. 然後根據查出來的程序id 去上面的工具中

檢視詳細資訊… 可以檢視到引起死鎖的SQL

檢視目前死鎖

SELECT
	request_session_id spid,
	OBJECT_NAME(
		resource_associated_entity_id
	) tableName
FROM
	sys.dm_tran_locks
WHERE
	resource_type = 'OBJECT'
           

檢視死鎖資訊

exec master.dbo.sp_who_lock;--檢視目前死鎖程序
exec master.dbo.p_killspid ytsafety;--殺掉引起死鎖的程序
           

檢視程序資訊

SELECT * FROM sys.dm_exec_connections;
SELECT * FROM sys.dm_exec_sessions;
SELECT
	spid,
	blocked,
	DB_NAME(sp.dbid) AS DBName,
	program_name,
	waitresource,
	lastwaittype,
	sp.loginame,
	sp.hostname,
	a.[Text] AS [TextData],
	SUBSTRING (
		A. TEXT,
		sp.stmt_start / 2,
		(
			CASE WHEN sp.stmt_end = - 1 THEN DATALENGTH (A. TEXT) ELSE sp.stmt_end END - sp.stmt_start
		) / 2
	) AS [current_cmd] FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A WHERE spid > 50 ORDER BY blocked DESC,
	DB_NAME(sp.dbid) ASC,
	a.[text];
           

殺掉死鎖程序

kill spid
           

繼續閱讀