更新时间:2024-09-26 GMT+08:00
分享

锁阻塞

什么是锁阻塞?

阻塞是指一个事务正在访问数据库中的某个资源(如表、行、页等),而另一个事务也想要访问同一资源,但由于某种原因(如锁定)无法访问,于是就被阻塞了。阻塞的SQL是指正在执行的SQL语句被阻塞了,无法继续执行,直到阻塞的原因被解决。

在SQL Server中,当一个事务正在执行时,如果另一个事务想要访问同一资源,但是该资源已被锁定,则该事务就会被阻塞,直到锁定的事务释放该资源。阻塞的SQL语句会一直等待,直到阻塞的原因被解决,才会继续执行。阻塞的SQL语句可能会导致性能下降,甚至会导致 整个系统崩溃。

RDS for SQL Server提供了锁阻塞页面。通过查看该页面,可获取数据库中的锁阻塞个数、阻塞源会话以及阻塞的SQL语句,协助定位并处理阻塞问题。

不升级高级智能运维包的情况下,最多只保留7天的记录。

采集原理

系统每10秒会对锁阻塞的情况进行一次采集。在系统进行采集的时间点,只要当一个会话执行SQL阻塞了其他会话的执行,就会被捕捉并统计到锁阻塞统计页面。可以把最后一次采集的样本的执行耗时,近似等于阻塞其他会话的时间。

操作步骤

  1. 登录管理控制台
  2. 单击管理控制台左上角的,选择区域。
  3. 单击页面左上角的,选择“数据库 > 云数据库 RDS”,进入RDS信息页面。
  4. 在“实例管理”页面,选择目标实例,单击实例名称,进入实例的“概览”页签。
  5. 在左侧导航栏选择“智能DBA助手 > 历史诊断”。
  6. 选择“锁阻塞”页签。

    • 查看锁阻塞数量
      查看近1天、近1周、近2周、近1月的锁阻塞个数。
      图1 阻塞数
    • 查看锁阻塞趋势

      查看近1天、近1周、近2周、近1月或者自定义时间段内的锁阻塞趋势。关于锁阻塞类型的详细说明,请参考官方文档

      图2 锁阻塞趋势
    • 查看阻塞源会话
      查看指定数据库的阻塞源会话。
      图3 阻塞源会话

      展开阻塞源后,可看到发生被阻塞的会话详情。

      图4 阻塞详情

锁阻塞界面信息介绍

  • 锁阻塞趋势

    展示近1天、近1周 、近2周、近1月的阻塞类型趋势,列出了主要可能发生的几种阻塞类型,展示某个时间段各种锁数量的变化趋势。

    图5 锁阻塞趋势
    表1 阻塞类型说明

    名称

    说明

    ASYNC_NETWORK_IO

    通常是由网络适配器驱动程序问题、筛选器驱动程序、防火墙或配置错误的路由器引起的。

    ASYNC_IO_COMPLETION

    当任务等待异步非数据 I/O 完成时发生。 示例包括热备用日志传送涉及的 I/O、数据库镜像、一些批量导入相关操作。

    CXCONSUMER

    当使用者线程(父线程)等待生成者线程发送行时,与并行查询计划一起发生。 CXCONSUMER 等待是由从其生成者线程中耗尽行的 Exchange 迭代器引起的。 这是并行查询执行的正常部分。

    CXPACKET

    在等待同步查询处理器 Exchange 迭代器以及生成和使用行时,与并行查询计划一起发生。 如果等待过多且无法通过优化查询(如添加索引)来减少,请考虑调整并行度的成本阈值,或降低并行度。

    DTC

    当某任务正在等待用于管理状态转换的事件时出现。 此状态控制在 SQL Server 收到 MS DTC 服务不可用的通知后,Microsoft 分布式事务处理协调器 (MS DTC) 事务的恢复何时发生

    LCK_M_BU

    当某任务正在等待获取大容量更新 (BU) 锁时出现。

    LCK_M_IS

    当某任务正在等待获取意向共享 (IS) 锁时出现。

    LCK_M_IU

    当某任务正在等待获取意向共享 (IS) 锁时出现。

    LCK_M_IX

    当某任务正在等待获取意向排他 (IX) 锁时出现。

  • 阻塞源会话列表

    阻塞源会话列表,包含会话SPID、QueryHash、等待类型、执行耗时、SQL、采集时间、数据库、客户端HostName、客户端名称、请求开始时间、登录用户名。

    图6 阻塞源会话
    表2 阻塞会话列表参数说明

    参数名称

    说明

    SPID

    阻塞源会话ID。

    QueryHash

    阻塞源会话QueryHash。

    等待类型

    阻塞源等待类型。

    执行耗时(ms)

    阻塞源会话执行耗时。由于是采样模式,可以把最后一次采样中的执行耗时,认为是会话总耗时。

    SQL

    阻塞源执行SQL,点击可以查看详情。

    采集时间

    阻塞源采集时间。

    数据库

    阻塞源SQL运行数据库。

    客户端HostName

    SQL 请求端HostName。

    客户端名称

    SQL 请求端名称。

    请求开始时间

    SQL开始时间。

    登录用户名

    SQL执行用户名。

  • 阻塞源关系图

    展示了,阻塞和被阻塞会话的关系图,鼠标移动到会话上,可展示出会话详情。

    图7 阻塞源关系图
    表3 阻塞关系图参数说明

    参数

    说明

    SPID

    会话ID。

    等待类型

    阻塞类型。可参考表2

    CPU时间(ms)

    SQL运行CPU时间。

    数据库

    SQL执行数据库。

    客户端HostName

    SQL 请求端HostName。

    客户端名称

    SQL 请求端名称。

    登录用户名

    SQL执行用户名。

    请求开始时间

    SQL开始时间。

    SQL

    SQL文本,可复制。

相关文档