SqlServer并发事务:死锁跟踪(三)3种跟踪死锁的方法

方法一:SQL code
DBCC TRACEON (3605,1204,1222,-1)  

说明:
3605 
将DBCC的结果输出到错误日志。
1204 返回参与死锁的锁的资源和类型,以及受影响的当前命令。
1222 
返回参与死锁的锁的资源和类型,以及使用了不符合任何 XSD 架构的 XML 格式的受影响的当前命令(比1204更进一步,SQL 
2005及以上可用)。
-1 以全局方式打开指定的跟踪标记。

以上跟踪标志作用域都是全局,即在SQL 
Server运行过程中,会一直发挥作用,直到SQL Server重启。

如 果要确保SQL Server在重启后自动开启这些标志,可以在SQL 
Server服务启动选项中,使用 /T 启动选项指定跟踪标志在启动期
间设置为开。(位于SQL Server配置管理器->SQL 
Server服务->SQL Server->属性->高级->启动参数)

在运行上面的语句后,当SQL 
Server中发生死锁时,已经可以在错误日志中看到了,但还不够直观(和其它信息混在一起)。(SSMS
 -> SQL Server实例 -> 
管理 -> SQL Server日志)
 
 
二扩展事件会话信息 sql server 2008 以上版本支持
--扩展事件会话的信息
select * from sys.dm_xe_sessions where name = 'system_health'


SELECT 
	xed.value('@timestamp','datetime')as Creation_Date,  
	xed.query('.')AS Extend_Event  
FROM 
(  
	SELECT CAST([target_data] AS XML)AS Target_Data  
	FROM sys.dm_xe_session_targets AS xt  
	INNER JOIN sys.dm_xe_sessions AS xs  
	ON xs.address= xt.event_session_address  
	WHERE xs.name=N'system_health'  
	AND xt.target_name=N'ring_buffer'
) AS XML_Data  
CROSS APPLY Target_Data.nodes('RingBufferTarget/event[@name="xml_deadlock_report"]')AS XEventData(xed)  
ORDER BY Creation_Date DESC
方法三:sql perfiler跟踪

你可能感兴趣的:(死锁检测)