加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 12:43:52 所属栏目:MsSql教程 来源:网络整理
导读:方法一:Windows 性能计数器监控 命令行输入:perfmon ?或者 perfmon /sys 选择实例:SQL Server :Locks ?Number of DeadLocks/sec _Total? ?(只能知道什么时候发生死锁,看不得具体死锁信息) 实时查看: 作业记录到文件:(可跟踪一段时间,耗系统

方法一:Windows 性能计数器监控

命令行输入:perfmon ?或者 perfmon /sys

选择实例:SQL Server :Locks ?Number of DeadLocks/sec _Total?

?(只能知道什么时候发生死锁,看不得具体死锁信息)


实时查看:



作业记录到文件:(可跟踪一段时间,耗系统性能很小)




方法二:打开profiler跟踪事件 locks: deadlock graph

(生成的死锁图可以拷贝出来XML格式的死锁信息)





方法三:打开1222或者1204标志记录死锁,在sqlserver日志查看

DBCC TRACEON(1222,-1)  
DBCC TRACEON(1204,-1)




如果日志太多就不好找了,这时可以用系统扩展存储过程筛选!


--查看是否死锁,确定死锁的的时间
exec xp_readerrorlog 0,1,'deadlock victim',NULL,'2015-01-01','2015-01-10','ASC'

--按时间查看sqlserver日志,即为死锁信息
exec xp_readerrorlog 0,'2015-01-07 22:13:10','2015-01-07 22:13:11','ASC'





方法四:系统扩展事件会话system_health自动记录

--扩展事件会话的信息
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






方法五:Service Broker Event Notifications

USE msdb;

--	队列用来保存数据
--	DROP QUEUE DeadlockQueue 
CREATE QUEUE DeadlockQueue WITH STATUS=ON
GO

--	将消息传递到数据库中的正确队列
--	DROP SERVICE DeadlockService
CREATE SERVICE DeadlockService
ON QUEUE DeadlockQueue([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification])
GO

--	创建可向服务发送有关数据库或服务器事件的信息的对象
--	DROP EVENT NOTIFICATION CaptureDeadlocks ON SERVER
CREATE EVENT NOTIFICATION CaptureDeadlocks
ON SERVER
WITH FAN_IN
FOR DEADLOCK_GRAPH
TO SERVICE 'DeadlockService','current database' ;
GO

--[此时发生死锁]

--	查询XML格式的死锁信息
SELECT CAST(message_body AS XML) AS message_body FROM DeadlockQueue






SqlServer 并发事务:死锁跟踪(二)确定死锁锁定的资源

SqlServer 并发事务:死锁跟踪(一)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读