电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

SQL Server中如何自动抓取阻塞

来源:金蝶云社区作者:金蝶2024-09-236

SQL Server中如何自动抓取阻塞

背景

    当发数据库生阻塞时,可以通过SQL语句来获取当前阻塞的会话情况,可以得到下面的信息

    

    说明:会话55阻塞了会话53两个会话都执行了update test set fid=10 where fid=0

    我们也经常碰到客户生产环境出现阻塞,由于不会抓取或者没有及时抓取,导致问题发生后,由于没有相关的信息,导致问题不能定位的问题

    为了能够保留问题发生的现场实际上可以通过SQL Server的扩展事件来实现自动抓取

部署方式

    前提

    由于SQL SERVER对阻塞的跟踪报告事件默认是禁用的,需要通过执行下面的SQL语句开启。

        EXEC sp_configure 'show advanced options', 1;  

        GO  

        RECONFIGURE;  

        GO  

        EXEC sp_configure 'blocked process threshold', 10;  

        GO  

        RECONFIGURE;  

        GO

        EXEC sp_configure 'blocked process threshold'

    执行后,应该看到下面的结果,表示修改成功

      

    配置

  •         打开Microsoft SQL SERVER Management Studio,点击\扩展事件\会话

        

  •         在会话节点,按右键选择【新建会话

        

        输入会话名称

        

    并且勾选,来保证服务器启动时,自动启动扩展事件。

   

  •     选择blocked_process_report事件

    

    点【确认】后,可以看到新建立的【阻塞】事件会话

  

    启动会话

        选择【阻塞】事件会话,按右键弹出菜单,选择【启动会话

       

监控会话

        启动会话后,发生过阻塞后,就可以通过【监控实时数据】来查看数据了

        

查看监控结果

        点击阻塞的记录,双击字段为blocked_process的值列,就可以看到通过脚本抓到的类似的阻塞会话详细信息。

       

      

问题

    但,这种方式抓取,从实际运行情况来看,当阻塞的会话超过2个时,记录的信息的会话不完整,存在丢失的问题,需要注意。

    打开一个新的会话,同样执行update test set fid=10 where fid=0,用语句查询时,结果如下:

    

    表示会话55阻塞了会话53,会话53阻塞了会话73

但此时扩展事件抓取的数据,丢失了会话55的信息。只有会话53阻塞会话73的记录。

   

查询阻塞的SQL

SELECT t1.resource_type AS [锁类型], DB_NAME(resource_database_id) AS [数据库名],

t1.resource_associated_entity_id AS [阻塞资源对象],

t1.resource_description as [资源描述信息], t1.request_mode AS [请求的锁],

t1.request_session_id AS [等待会话], t2.wait_duration_ms AS [等待时间],      

(SELECT [text] FROM sys.dm_exec_requests AS r WITH (NOLOCK)                      

    CROSS APPLY sys.dm_exec_sql_text(r.[sql_ha

SQL Server中如何自动抓取阻塞

背景 当发数据库生阻塞时,可以通过SQL语句来获取当前阻塞的会话情况,可以得到下面的信息 说明:会话55阻塞了会话53。两个会话...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信