我在Server 2014中遇到了死锁。
我知道我们可以使用Server中的性能计数器从https://learn.microsoft.com/en-us/sql/relational-databases/performance-monitor/sql-server-locks-object获得死锁总数:死锁数/秒
我想知道是否有办法使每个表的死锁计数?
发布于 2017-09-20 12:20:44
在xml_deadlock_report扩展事件会话中使用system_health非常容易。
IF OBJECT_ID('tempdb..[#DeadlockData]') IS NOT NULL
DROP TABLE #DeadlockData;
WITH xml
AS ( SELECT CAST(event_data AS XML) AS XMLDATA
FROM sys.fn_xe_file_target_read_file('system_health*.xel', NULL, NULL, NULL) )
SELECT xml.XMLDATA
INTO #DeadlockData
FROM xml
WHERE xml.XMLDATA.value('(/event/@name)[1]', 'varchar(255)') = 'xml_deadlock_report';
WITH death_indeed
AS ( SELECT ca.x.value('@objectname', 'VARCHAR(256)') AS object_name
FROM #DeadlockData AS dd
CROSS APPLY dd.XMLDATA.nodes('//resource-list/*') AS ca(x) )
SELECT death_indeed.object_name, COUNT_BIG(*) AS deaths
FROM death_indeed
GROUP BY death_indeed.object_name在创建了一些不同的死锁之后,我得到了以下内容:
object_name deaths
StackOverflow.dbo.Users 9
StackOverflow.dbo.Posts 9https://dba.stackexchange.com/questions/186377
复制相似问题