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)
			{
			}
相关推荐
代码的余温2 天前
SQL Server全链路安全防护
数据库·安全·sqlserver
张人玉2 天前
SQLSERVER数据备份
数据库·oracle·sqlserver
我想起个名字4 天前
sqlserver2008导入excel表数据遇到的问题
sqlserver·excel
浊尘4 天前
SQL server实现异地增量备份和全量备份
数据库·sqlserver
代码的余温4 天前
SQL Server服务管理
数据库·sqlserver
代码的余温4 天前
解析SQL Server核心服务与功能
数据库·sqlserver
YoungUpUp5 天前
【SQL Server 2022】保姆级SQL Server 详细图文下载安装教程
数据库·sql·sqlserver·sql server·sql server数据库·sql server 2022·sql 数据库
代码的余温5 天前
SQL Server核心架构深度解析
数据库·sqlserver·架构
张人玉6 天前
SQLSERVER基本cmd操作命令
数据库·sqlserver