设为首页 收藏本站
查看: 946|回复: 0

[经验分享] 2012 使用XEvent sqlserver.blocked_process_report检测阻塞

[复制链接]

尚未签到

发表于 2018-6-24 08:39:48 | 显示全部楼层 |阅读模式
  网上看到的一篇文章来追踪阻塞的,非常简便而且性能很好,跟大家分享。原文地址:AnXEventa Day (21 of 31) – The Future – Tracking Blocking in Denali
  在2005新增的Blocked Process Report trace事件是我最喜欢的功能之一,当进程被阻塞超过用户允许的阻塞时间后会自动产生XML的报表。我曾经2年前针对这个功能在SQLServer Center写过一篇文章Using the Blocked Process Reportin SQL Server 2005/2008。使用这个事件需要使用SQL Server trace或者配置Event Notifications在Service Broker Queue中捕获事件信息。这两种配置都比较复杂。在SQL Server2012中引入了一个新的扩展事件sqlserver.blocked_process_report,非常方便使用。我们现在可以通过创建一个活动会话来捕获被阻塞的进程信息。我们仍然需要配置‘blocked process threshold’选项。
  CREATE EVENT SESSIONMonitorBlocking
  ON SERVER
  ADD EVENT  sqlserver.blocked_process_report
  ADD TARGET  package0.ring_buffer(SETMAX_MEMORY=2048)
  WITH (MAX_DISPATCH_LATENCY=  5SECONDS)
  GO
  ALTER EVENT SESSIONMonitorBlocking
  ON SERVER
  STATE=START
  GO
  EXECUTE sp_configure 'show advanced options',1
  GO
  RECONFIGURE
  GO
  EXECUTE sp_configure 'blocked process threshold',15
  GO
  RECONFIGURE
  GO
  EXECUTE sp_configure 'show advanced options',0
  GO
  RECONFIGURE
  GO
  为了测试这个会话事件,我们在SSMS中开启两个查询窗口然后连接到数据库执行下面的代码:
  USE [tempdb]
  GO
  CREATETABLE t1(RowIDintidentityprimarykey)
  GO
  BEGINTRANSACTION
  INSERTINTO t1DEFAULTVALUES
  WAITFOR DELAY'00:00:30'
  COMMIT
  第二个窗口代码:
  USE [tempdb]
  GO
  SELECT*FROM t1
  第一个查询将会阻塞第二个查询知道执行完成,在目标ring_buffer将会为我们的事件会话产生blocked proce***eport。查询ring_buffer目标的阻塞信息,我们可以快速的使用XQuery解析XML数据,代码如下:
  -- Query the XML to get the Target Data
  SELECT
  n.value('(event/@name)[1]','varchar(50)')AS event_name,
  n.value('(event/@package)[1]','varchar(50)')AS package_name,
  DATEADD(hh,
  DATEDIFF(hh,GETUTCDATE(),CURRENT_TIMESTAMP),
  n.value('(event/@timestamp)[1]','datetime2'))AS [timestamp],
  ISNULL(n.value('(event/data[@name="database_id"]/value)[1]','int'),
  n.value('(event/action[@name="database_id"]/value)[1]','int'))as[database_id],
  n.value('(event/data[@name="database_name"]/value)[1]','nvarchar(128)')as [database_name],
  n.value('(event/data[@name="object_id"]/value)[1]','int')as[object_id],
  n.value('(event/data[@name="index_id"]/value)[1]','int')as[index_id],
  CAST(n.value('(event/data[@name="duration"]/value)[1]','bigint')/1000000.0AS decimal(6,2))as[duration_seconds],
  n.value('(event/data[@name="lock_mode"]/text)[1]','nvarchar(10)')as [file_handle],
  n.value('(event/data[@name="transaction_id"]/value)[1]','bigint')as[transaction_id],
  n.value('(event/data[@name="resource_owner_type"]/text)[1]','nvarchar(10)')as [resource_owner_type],
  CAST(n.value('(event/data[@name="blocked_process"]/value)[1]','nvarchar(max)')as XML) as[blocked_process_report]
  FROM
  (    SELECTtd.query('.')asn
  FROM
  (
  SELECTCAST(target_dataAS XML)astarget_data
  FROM sys.dm_xe_sessionsASs
  JOIN sys.dm_xe_session_targetsASt
  ON s.address=t.event_session_address
  WHERE s.name='MonitorBlocking'
  ANDt.target_name= 'ring_buffer'
  ) ASsub
  CROSS APPLY target_data.nodes('RingBufferTarget/event')ASq(td)
  ) as  tab
  GO
DSC0000.jpg

  blocked process report的扩展事件输出中包含了很多额外的信息比如database_id, object_id, index_id, duration, lock_mode,transaction_id, and resource_owner_type 。XML输出可以在SSMS中打开:
  <blocked-process-report>
  <blocked-process>
  <processid="process2eb8bda8"taskpriority="0"logused="0"waitresource="KEY: 2:2666130980878942208 (61a06abd401c)"
  waittime="25480"ownerId="12748"transactionname="SELECT"lasttranstarted="2010-12-21T18:19:03.263"
  XDES="0x2dfb9c10"lockMode="S"schedulerid="1"kpid="2484"status="suspended"spid="60"sbid="0"ecid="0"
  priority="0"trancount="0"lastbatchstarted="2010-12-21T18:19:03.263"
  lastbatchcompleted="2010-12-21T18:19:03.263"clientapp="Microsoft SQL Server Management Studio - Query"
  hostname="WIN-5B9V8JPLP3H"hostpid="2708"loginname="WIN-5B9V8JPLP3H\Administrator"
  isolationlevel="read committed (2)"xactid="12748"currentdb="2"lockTimeout="4294967295"
  clientoption1="671090784"clientoption2="390200">
  <executionStack>
  <frameline="1"sqlhandle="0x02000000d9de7b2f4f3a78e40f100bc02a84efbb9f01a84d"/>
  </executionStack>
  <inputbuf>
  SELECT * FROM t1   </inputbuf>
  </process>
  </blocked-process>
  <blocking-process>
  <processstatus="suspended"waittime="27430"spid="57"sbid="0"ecid="0"priority="0"trancount="1"
  lastbatchstarted="2010-12-21T18:19:01.437"lastbatchcompleted="2010-12-21T18:13:25.637"
  clientapp="Microsoft SQL Server Management Studio - Query"hostname="WIN-5B9V8JPLP3H"
  hostpid="2708"loginname="WIN-5B9V8JPLP3H\Administrator"isolationlevel="read committed (2)"
  xactid="12733"currentdb="2"lockTimeout="4294967295"clientoption1="671090784"clientoption2="390200">
  <executionStack>
  <frameline="3"stmtstart="100"stmtend="150"sqlhandle="0x020000005a74b3030117e049389a93b2ce5bfb48e272f938"/>
  </executionStack>
  <inputbuf>
  BEGIN TRANSACTION
  INSERT INTO t1 DEFAULT VALUES
  WAITFOR DELAY '00:00:30'
  COMMIT   </inputbuf>
  </process>
  </blocking-process>
  </blocked-process-report>
  blocked process report在Extended Events中的输出跟SQL Server trace或者Event Notifications是相同的。这种方法只是一个新的手机信息的机制。
  注意:当你不想获得阻塞信息的时候,记得关闭‘blocked process threshold选项,默认值为0.

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-529848-1-1.html 上篇帖子: Windows环境下的tomcat + apache配置 下篇帖子: 使用Windows PE和ImageX收集一个 Windows Embedded Standard 镜像
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表