SQL Server运SQL Server 扩展事件来创造死锁的光阴跟

 

咱们透过SQL Server
2012图形界面来安排一个恢弘事件跟踪会话。然后可以生成SQL脚本,在2008或者2008
R2版本下运行类似的跟。

 

步骤1:

透过“Object Explorer”连接至实例,展开“Management”、“Extended
Events”、“Sessions”。

 

SQL Server 1

 

步骤2:

右键点击“Sessions”,创建一个新的对话向导。

 

步骤3:

输入会话名称“Deadlock_Monitor”,点击下一致步。

 

SQL Server 2

 

步骤4:

分选无下模板(像SQL Server
Profiler模板一样,预设了一些默认选项一起启动,但无一个饱我们要求的模板),点击下一样步。

 

SQL Server 3

 

步骤5:

选要捕获的风波,在“Event library”输入deadlock,可张如下图所示:

 

SQL Server 4

 

步骤6:

选择“xml_deadlock_report”,添加到右手选择的风波列表中。再单击下同样步。

 

SQL Server 5

 

步骤7:

选取要捕获的排,这里我们挑选下同样步。

 

SQL Server 6

 

步骤8:

概念过滤条件,这里我们忽略这个设置,点击下一样步。

 

SQL Server 7

 

步骤9:

选料保存数据到文件,设置文件路径和太充分价值等。点击下同样步。

 

SQL Server 8

 

步骤10:

反省有的配备,点击完成来安及启用会话。

 

SQL Server 9

 

步骤11:

现今咱们好启动捕获,并查阅活动数量。

 

SQL Server 10

 

步骤12:

在刚刚创建会话“Deadlock_Monitor”上右键点击生成脚本。

 

1
2
3
4
5
CREATE EVENT SESSION [Deadlock_Monitor] ON SERVER
ADD EVENT sqlserver.xml_deadlock_report
ADD TARGET package0.event_file(SET filename=N'D:\MSSQL\DATA\MSSQL11.MSSQLSERVER\MSSQL\Log\Deadlock_Monitor.xel',max_file_size=(256),max_rollover_files=(10))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO

 

步骤13:

在会话“Deadlock_Monitor”上右键选择启动会话。

 

步骤14:

分级以简单个查询窗口实行如下语句。

 

1
2
3
4
5
6
7
8
9
10
11
12
13
--Window1
USE AdventureWorks2012
BEGIN TRAN
UPDATE Person.Address SET AddressLine1 = 'New address' WHERE AddressID = 20
WAITFOR DELAY '0:0:10'
SELECT FROM Person.Address WHERE AddressID = 25
  
--Window 2
USE AdventureWorks2012
BEGIN TRAN
UPDATE Person.Address SET AddressLine1 = 'New address' WHERE AddressID = 25
WAITFOR DELAY '0:0:10'
SELECT FROM Person.Address WHERE AddressID = 20

 

步骤15:

在 “Deadlock_Monitor”上的package0.event_file上右键选择“View Target
Data…”。选择对应timestamp的死锁条目,在Details的xml_report值里显示的就是是死锁的XML文件,可双击打开。点击
Deadlock即可见到死锁的图形化展示。

 

SQL Server 11

 

SQL Server 12

 

SQL Server 13

 

深入进阶

 

死锁详细信息还有几个步骤可用来部署扩展事件来监督死锁。

我怀念去讨论另外两个事件来捕获到剖析死锁更详细的信。

 

  1. Lock: Deadlock事件类

以此波类可以为此来验证死锁牺牲品。这个波作证什么时候要需要一个锁,但叫注销当一个死锁牺牲品。

 

  1. Lock: Deadlock chain事件类

夫波类用于监控死锁状态。当起一个死锁时该事件为点。通过在实例级别监控者波,我们会分辨那些对象在死锁中,我们是否当应用程序中生死锁导致的性问题。

 

步骤1:

每当前面的“Deadlock_Monitor”会说话上右键选择“Properties”。选择“Events”页,将lock_deadlock和lock_deadlock_chain事件类添加到右已经选择事件列表。

 

SQL Server 14

 

步骤2:

运行前的死锁示例。

 

步骤3:

在“Deadlock_Monitor”上的package0.event_file上右键选择“View Target
Data…”。选择针对性应timestamp的死锁条目。

 

SQL Server 15

 

SQL Server 16

 

比方有用户反馈说他们于应用程序的错误日志里发现了出口了死锁信息,而且是在半夜三更。我们就算好知道怎么监督及收获死锁数据了。

相关文章