KB4338715 - 修复:在 SQL Server 2016 和 2017 中,针对一次查询内死锁事件报告了许多xml_deadlock_report事件

应用对象
SQL Server 2016 Developer - duplicate (do not use) SQL Server 2016 Enterprise - duplicate (do not use) SQL Server 2016 Enterprise Core - duplicate (do not use) SQL Server 2016 Standard - duplicate (do not use) SQL Server 2017 Developer SQL Server 2017 Enterprise Core SQL Server 2017 Enterprise

症状

假设您使用 Microsoft SQL Server 2016 和 2017。 如果启用事件 xml_deadlock_report 来收集死锁数据,则会为一次查询内死锁事件报告许多 xml_deadlock_report 事件。

解决方法

作为此问题的解决方法,可以使用筛选器 error_number = 1205 而不是 xml_deadlock_report 来收集 error_reported XEvent,如以下示例所示:

注意

  • 在服务器上创建事件会话 [Deadlock_Collection]
  • 添加事件sqlserver.error_reported (
  • WHERE ([error_number]= (1205) ) )
  • ADD TARGET package0.histogram (SET filtering_event_name=N'sqlserver.lock_acquired',source=N'sqlserver.query_hash')
  • WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 秒,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=ON,STARTUP_STATE=OFF)
  • GO

解决方法

此问题已在 SQL Server 的以下累积更新中修复:

SQL Server 2017 累积更新 10

SQL Server 2016 SP2 累积更新 2

注意: 使用此修补程序后,当可以在不终止线程的情况下解决死锁时,不会报告查询内死锁的 xml_deadlock_report 事件。

关于 SQL Server 的累积更新:

SQL Server 的每个新累积更新都包含上一个累积更新中包含的所有修补程序和所有安全修补程序。 查看 SQL Server 的最新累积更新:

SQL Server 2017 的最新累计更新

SQL Server 2016 的最新累计更新

状态

Microsoft 已确认在 "适用于" 部分中所列的 Microsoft 产品中存在问题。

参考资料

了解 Microsoft 用于描述软件更新的术语。