利用扩展事件监控死锁-图形用户界面
2014-06-08 10:30
453 查看
一:建事件会话
1:打开新建会话向导
展开对象资源管理器->管理->扩展事件->会话->新建会话向导:2:简介
3:设置会话属性
输入扩展事件会话名称(勾选‘在服务器启动时启动事件会话’,否则下次服务器启动时,会话目标数据都是空的):4:选择模板
5:选择要捕获的事件
选择事件xml_deadlock_report,如图:选中,将其移到右边‘所选事件’中,
6:捕获全局字段
收集个人所需要的信息,如:7:设置会话筛选器
8:指定会话数据存储
9:摘要
10:创建事件会话
二:添加目标event file
右击该事件会话名称->‘属性’在‘数据存储’选项卡处,点击‘添加’按钮,
选择event file事件目标:
三:模拟死锁
--在一个窗口输入:BEGIN
TRAN --ROLLBACK
USE
TEST;
UPDATE
EMP2
SET
ename='JIAOJIAO'
WHERE
empno=2
WAITFOR
DELAY '0:0:5';
UPDATE
EMP2
SET
ename='SONGSONG'
WHERE
empno=4
--SELECT@@SPID 66
--在另一个窗口输入并执行:
BEGIN
TRAN --ROLLBACK
USE
TEST;
UPDATE
EMP2
SET
ename='SONGSONG'
WHERE
empno=4
WAITFOR
DELAY '0:0:5';
UPDATE
EMP2
SET
ename='JIAOJIAO'
WHERE
empno=2
--SELECT@@SPID 61
四:查看死锁信息
右击该扩展事件目标package0.event_file->‘查看目标数据’,如图:单击事件‘xml_deadlock_report’,
可以在下面‘详细信息’的’xml_report’看到详细的xml报告。
双击上面这一行,查看详细报告:
<deadlock>
<victim-list>
<victimProcessid="process3756f0cf8"
/>
</victim-list>
<process-list>
<processid="process3756f0cf8"taskpriority="0"logused="144"waitresource="KEY:
7:72057594050510848 (9d6bf8154a2a)"waittime="3726"ownerId="29210246"transactionname="user_transaction"lasttranstarted="2014-06-07T19:18:08.613"XDES="0x365f826c8"lockMode="X"schedulerid="2"kpid="11468"status="suspended"spid="61"sbid="0"ecid="0"priority="0"trancount="2"lastbatchstarted="2014-06-07T19:18:08.613"lastbatchcompleted="2014-06-07T19:17:57.943"lastattention="1900-01-01T00:00:00.943"clientapp="Microsoft
SQL ServerManagement Studio - 查询"hostname="ZB-BAIDD-PC"hostpid="3388"loginname="SINOOCEANLAND\v-baidd"isolationlevel="read
committed (2)"xactid="29210246"currentdb="7"lockTimeout="4294967295"clientoption1="671090784"clientoption2="390200">
<executionStack>
<frameprocname="adhoc"line="10"stmtstart="58"sqlhandle="0x02000000d9418b10cbc871e6336b29994a63088a4ca33f5e0000000000000000000000000000000000000000">
UPDATE [EMP2] set [ename] =@1 WHERE [empno]=@2
</frame>
<frameprocname="adhoc"line="10"stmtstart="258"sqlhandle="0x020000003e693606e108809864639179c3d61975fef1aee30000000000000000000000000000000000000000">
UPDATE EMP2
SET ename='JIAOJIAO'
WHERE empno=2
--SELECT @@SPID 61
</frame>
</executionStack>
<inputbuf>
--在另一个窗口输入并执行:
BEGIN TRAN --ROLLBACK
USE TEST;
UPDATE EMP2
SET ename='SONGSONG'
WHERE empno=4
WAITFOR DELAY '0:0:5';
UPDATE EMP2
SET ename='JIAOJIAO'
WHERE empno=2
--SELECT @@SPID 61
</inputbuf>
</process>
<processid="process371a07868"taskpriority="0"logused="332"waitresource="KEY:
7:72057594050510848 (1a39e6095155)"waittime="2875"ownerId="29210254"transactionname="user_transaction"lasttranstarted="2014-06-07T19:18:09.467"XDES="0x372890d28"lockMode="X"schedulerid="3"kpid="16592"status="suspended"spid="66"sbid="0"ecid="0"priority="0"trancount="2"lastbatchstarted="2014-06-07T19:18:09.467"lastbatchcompleted="2014-06-07T19:18:03.280"lastattention="1900-01-01T00:00:00.280"clientapp="Microsoft
SQL ServerManagement Studio - 查询"hostname="ZB-BAIDD-PC"hostpid="3388"loginname="SINOOCEANLAND\v-baidd"isolationlevel="read
committed (2)"xactid="29210254"currentdb="7"lockTimeout="4294967295"clientoption1="671090784"clientoption2="390200">
<executionStack>
<frameprocname="adhoc"line="7"stmtstart="58"sqlhandle="0x02000000d9418b10cbc871e6336b29994a63088a4ca33f5e0000000000000000000000000000000000000000">
UPDATE [EMP2] set [ename] =@1 WHERE [empno]=@2
</frame>
<frameprocname="adhoc"line="7"stmtstart="218"sqlhandle="0x02000000f0a53a0a1faf8c95858039e14cf0bad5536708520000000000000000000000000000000000000000">
UPDATE EMP2
SET ename='SONGSONG'
WHERE empno=4
--SELECT @@SPID 66
</frame>
</executionStack>
<inputbuf>
BEGIN TRAN --ROLLBACK
USE TEST;
UPDATE EMP2
SET ename='JIAOJIAO'
WHERE empno=2
WAITFOR DELAY '0:0:5';
UPDATE EMP2
SET ename='SONGSONG'
WHERE empno=4
--SELECT @@SPID 66
</inputbuf>
</process>
</process-list>
<resource-list>
<keylockhobtid="72057594050510848"dbid="7"objectname="test.dbo.EMP2"indexname="1"id="lock37ab40480"mode="X"associatedObjectId="72057594050510848">
<owner-list>
<ownerid="process371a07868"mode="X"
/>
</owner-list>
<waiter-list>
<waiterid="process3756f0cf8"mode="X"requestType="wait"
/>
</waiter-list>
</keylock>
<keylockhobtid="72057594050510848"dbid="7"objectname="test.dbo.EMP2"indexname="1"id="lock3724bb900"mode="X"associatedObjectId="72057594050510848">
<owner-list>
<ownerid="process3756f0cf8"mode="X"
/>
</owner-list>
<waiter-list>
<waiterid="process371a07868"mode="X"requestType="wait"
/>
</waiter-list>
</keylock>
</resource-list>
</deadlock>
在‘死锁’选项里可以看到死锁graph.
把鼠标放在图表两个圆圈上面,查看具体的语句,如放在作为牺牲品的圆圈上面:
在这里利用event_file目标,能看到针对某个死锁的xml报告及图表。
可以结合ring_buffer目标,查看所有死锁报告历史。
备注:本篇文章翻译自文章‘How
to monitor deadlock using extended events in SQL Server 2008 and later',并做了些许改动。
相关文章推荐
- 利用扩展事件和警报实时监控死锁-命令方式
- SQL Server扩展事件(Extended Events)-- 使用system_health默认跟踪会话监控死锁
- SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁脚本实现
- SQL Server扩展事件(Extended Events)-- 使用扩展事件跟踪监控死锁
- 利用 onload 事件监控跨站资源
- 详解运维监控利器Nagios 系列(五)-利用插件扩展Nagios的监控功能
- 利用 onload 事件监控跨站资源
- 利用 onload 事件监控跨站资源
- 利用扩展事件(Xevents)捕捉高消耗查询
- 用 扩展事件抓取过去的死锁
- 利用 onload 事件监控跨站资源
- 利用 onload 事件监控跨站资源
- 三,如何监控和解决SQL Server的阻塞(3) (扩展事件)
- 利用Oracle Enterprise Manager的扩展监控功能开发MySQL Plugin用于MySQL数据库监控
- 利用 onload 事件监控跨站资源
- 利用 onload 事件监控跨站资源
- 利用 onload 事件监控跨站资源
- 如何监控和解决SQL Server的阻塞(3) (扩展事件)
- 利用 onload 事件监控跨站资源
- 使用SQL Server 扩展事件来创建死锁的时间跟踪