云数据库 SQL Server 支持记录阻塞事件及死锁事件,通过记录,可以查找出造成阻塞及死锁的执行 SQL 详细信息,以便进行优化。
本文为您介绍如何查询和下载阻塞事件及死锁事件。
说明:
仅2012、2014、2016、2017、2019、2022 Enterprise 版本支持阻塞事件及死锁事件,2008 R2 Enterprise 版本不支持。
日志时间默认为北京时间,若修改了默认时区,则日志数据的存储时间显示为实例服务器所在时区时间,但控制台显示会是北京(UTC+8)时间。
前提条件
查询和下载阻塞事件及死锁事件,需要先开启采集阻塞事件及死锁事件。
背景
在数据库中,为了保持数据的一致性,当某个会话对特定资源进行修改并未完成修改时,系统不会释放此特定资源,目的是为了避免其他并发会话对同个资源进行访问或修改。当存在慢 SQL 或者其他异常时,可能会导致资源被长时间占用,严重影响其他会话的访问,形成阻塞事件。
另一方面,如果多个事务互相竞争资源,例如,第一个事务连接占用的资源 A 没有释放,准备获取第二个事务连接占用的资源 B,而第二个事务连接占用的资源 B 没有释放,又准备获取第一个事务连接占用的资源 A,就会形成死锁事件。
为解决上述问题,云数据库 SQL Server 在控制台提供了阻塞事件及死锁事件记录设置功能,开启后,可快速定位数据库中发生的阻塞和死锁事件,帮助您定位和优化引发问题的执行 SQL 详细信息。
说明
阻塞事件及死锁事件默认关闭采集,可自行开启,开启后,将会对阻塞事件及死锁事件进行采集,文件中会记录造成阻塞及死锁的 SQL 详细信息。
阻塞事件及死锁事件采集开启后,采集阈值默认为1000毫秒(1000毫秒=1秒),超过1000毫秒的执行 SQL 会被记录为阻塞 SQL 及死锁 SQL,支持自定义修改采集阈值(1000毫秒-86400000毫秒)。
阻塞事件及死锁事件文件默认每5分钟采集一次,即每5分钟内,超过1秒的执行 SQL 均会被记录。
阻塞事件及死锁事件的保留时间默认为7天,到期后自动删除。
开启采集阻塞事件及死锁事件
说明:
阻塞事件及死锁事件的采集为同时打开,或者同时关闭,暂不支持单独设置采集。
方法一:通过操作日志设置开启
1. 登录 SQL Server 控制台。
2. 在上方选择地域,找到需要查询或下载慢查询日志的实例,单击实例 ID 或在其操作列单击管理,进入实例管理页。
3. 在实例管理页,选择操作日志页。
4. 单击操作日志设置。
5. 在弹窗下完成如下配置,单击保存。
参数 | 说明 |
阻塞事件及死锁事件采集 | 打开此功能按钮。 |
阻塞事件及死锁事件采集阈值 | 设置采集阈值,参考范围:1000-86400000毫秒。 |
阻塞事件及死锁事件采集频率 | 默认为每5分钟,不支持修改。 |
阻塞事件及死锁事件保留时间 | 默认保留7天,到期后自动删除。 |
方法二:通过设置参数 blocked process threshold 值开启
1. 登录 SQL Server 控制台,在实例列表,单击实例 ID,进入实例管理页面。
2. 在实例管理页面,选择参数配置 > 参数设置页,找到参数
blocked process threshold
所在行,在当前运行参数值列,单击
设置参数值不为0。说明:
blocked process threshold 参数值默认为0,表示不采集阻塞事件及死锁事件。
blocked process threshold 参数值范围:0-86400,单位:秒。
blocked process threshold 参数当前运行值不为0,表示采集阻塞事件及死锁事件,同时在 操作日志设置 里采集开关会对应开启。
查询和下载阻塞事件及死锁事件
1. 在实例管理页,选择操作日志 > 阻塞事件,或操作日志 > 死锁事件可以查看对应事件列表。
支持查看的字段信息为:文件名、文件生成开始时间、文件生成结束时间、文件大小、操作(下载)。
支持根据时间范围检索慢日志:近5分钟、近15分钟、近半小时、近1小时、近3小时、近24小时、今天、昨天、近3天、近7天、近30天以及自定义时间段。
2. 在操作列单击下载,即可下载阻塞事件或死锁事件文件。
相关 API