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)
			{
			}
相关推荐
betazhou4 天前
Apache Seatunnel 抽取SQL server实时同步到Oracle-多表同步(五)
数据库·oracle·sqlserver·apache·seatunnel
betazhou6 天前
Apache seatunel配置-数据同步测试(直接把采集数据打印到控制面板) - SQL server
sqlserver·apache·seatunnel
福娃筱欢8 天前
SQLServer迁移至KES SQLServer模式 问题整理
数据库·oracle·sqlserver
xuefuhe13 天前
SQL Server:数据库没配置publication,但sp_replcounters 显示有事务积压
sqlserver
颖月石14 天前
Rust 进程假死问题排查(dragonfly+tokio)
死锁·dragonfly
智码看视界17 天前
Day84-Arthas诊断实战:CPU飙高/死锁/内存泄漏排查三板斧
jvm·内存泄漏·arthas·死锁·性能诊断·生产调优
for_ever_love__17 天前
MySQL 锁与死锁讲透:行锁、间隙锁、Next-Key Lock 与排查方法
mysql·lock·行锁·死锁·间隙锁·排查·next-key
~木雨17 天前
Java 线程从生到死:创建三式、六态流转、中断协作与死锁活锁饥饿,一篇讲透
java·java并发·虚拟线程·死锁·线程状态·中断机制
geovindu20 天前
sql: JSON and XML Data Handling in SQL using sql server 2025
大数据·数据库·sqlserver·数据库开发·数据库架构
路远的数据库笔记21 天前
SQL Server迁移国产数据库怎么做?九套口岸库零停机割接实战
数据库·经验分享·sqlserver·dba