SQLServer死锁监测方案:如何使用XE.Core解析xel文件里包含死锁扩展事件的死锁xml

1.处理流程

对于SQLServer死锁监测的方式,最终选用的方案是自定义的死锁扩展事件在生成本地xel文件,直接对xel文件解析。SQLServer自带两个dll可用于解析xel文件,编程语言选用C#,死锁扩展事件的名为 xml_deadlock_report。解析时需考虑版本问题,SQLServer2008版本需要xel,xem文件。

两个DLL: Microsoft.SqlServer.XE.Core.dll, Microsoft.SqlServer.XEvent.Linq.dll

  1. 抛弃SQLServer自带的system_health,完全自定义新的死锁扩展事件,system_health包含扩展事件太多,解析耗费时间长,且文件很大。
  2. 抛弃使用sys.fn_xe_file_target_read_file查询死锁xml的方式,当有xel文件,却仍旧依赖数据库查询获取xml不值得,希望与数据库查询隔离。

2.两种SQLServer版本代码解析示例

2008版本的处理代码,需要xel和xem文件一起解析,xem也是需要指定生成的

csharp 复制代码
			try
			{
				using (QueryableXEventData events = new QueryableXEventData(
					new string[]{ @"D:\xxxx_0_134010006262980000.xel"},
					new string[]{ @"D:\xxxx_0_134010006262980000.xem"}
				))
				{
					int count = 0  ;
					foreach (PublishedEvent evt in events)
					{
						if (evt.Name == "xml_deadlock_report")
						{
							string timeStamp = evt.Timestamp.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
							string deadlockXml = evt.Fields["xml_report"].Value.ToString();
						}
					}
					
				}
			}
			catch (Exception ex)
			{
			}

2008版本以上的,直接解析xel

csharp 复制代码
			try
			{
				using (QueryableXEventData events = new QueryableXEventData(@"D:\xxxx_0_134010006262980000.xel"
				))
				{
					int count = 0  ;
					foreach (PublishedEvent evt in events)
					{
						if (evt.Name == "xml_deadlock_report")
						{
							string timeStamp = evt.Timestamp.ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
							string deadlockXml = evt.Fields["xml_report"].Value.ToString();
						}
					}
					
				}
			}
			catch (Exception ex)
			{
			}
相关推荐
橘颂TA1 天前
【Linux】死锁四条件的底层逻辑:从锁冲突到 STL 组件的线程安全实践(Ⅵ)
linux·运维·服务器·c++·死锁
栗子叶1 天前
JVM 内存溢出和死锁检测
jvm·调优·死锁
Clang's Blog2 天前
使用 SQL Server Management Studio 还原 .bak 备份文件的完整指南
数据库·sqlserver
武藤一雄4 天前
C# 关于多线程如何实现需要注意的问题(持续更新)
windows·后端·microsoft·c#·.net·.netcore·死锁
雁凡彡4 天前
mybatis-plus中sqlserver 查询数组中指定位置前的数据
数据库·sqlserver·mybatis
dishugj5 天前
[SQLSERVER] Lock Waits/sec参数含义详解
数据库·oracle·sqlserver
橘色的喵6 天前
全局锁策略:通过有序获取与超时保护构建无死锁系统
linux·死锁
l1t8 天前
使用docker安装sql server linux版
linux·sql·docker·容器·sqlserver
杨云龙UP9 天前
Windows环境下安装SQL Server 2016企业版+SP3补丁+SSMS连接操作手册_20251230
运维·服务器·数据库·sql·算法·sqlserver·哈希算法
杨云龙UP10 天前
SQL Server定时自动备份配置:使用SSMS维护计划向导配置数据库每日自动备份_20260101
运维·服务器·数据库·sql·sqlserver·桌面