# 查看锁阻塞
#### 什么是锁阻塞？
阻塞是指一个事务正在访问数据库中的某个资源（如表、行、页等），而另一个事务也想要访问同一资源，但由于某种原因（如锁定）无法访问，于是就被阻塞了。阻塞的SQL是指正在执行的SQL语句被阻塞了，无法继续执行，直到阻塞的原因被解决。
在SQL Server中，当一个事务正在执行时，如果另一个事务想要访问同一资源，但是该资源已被锁定，则该事务就会被阻塞，直到锁定的事务释放该资源。阻塞的SQL语句会一直等待，直到阻塞的原因被解决，才会继续执行。阻塞的SQL语句可能会导致性能下降，甚至会导致 整个系统崩溃。
RDS for SQL Server提供了锁阻塞页面。通过查看该页面，可获取数据库中的锁阻塞个数、阻塞源会话以及阻塞的SQL语句，协助定位并处理阻塞问题。
![](https://support.huaweicloud.com/usermanual-rds-mssql/public_sys-resources/note_3.0-zh-cn.png)
不升级高级智能运维包的情况下，最多只保留7天的记录。
#### 采集原理
系统每10秒会对锁阻塞的情况进行一次采集。在系统进行采集的时间点，只要当一个会话执行SQL阻塞了其他会话的执行，就会被捕捉并统计到锁阻塞统计页面。可以把最后一次采集的样本的执行耗时，近似等于阻塞其他会话的时间。
#### 操作步骤
1. [登录RDS管理控制台](https://console.huaweicloud.com/rds/#/rds/management/list)。
2. 单击管理控制台左上角的![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002572991262.png)，选择区域。
3. 在"实例管理"页面，选择目标实例，单击实例名称，进入实例的"概览"页签。
4. 在左侧导航栏选择"智能DBA助手"下的"锁\&事务"。
5. 选择"锁阻塞"页签。 
   - 查看锁阻塞数量
     查看近1天、近1周、近2周、近1月的锁阻塞个数。
     图1阻塞数   
     ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914590.png "点击放大") 
   
   - 查看锁阻塞趋势 查看近1天、近1周、近2周、近1月或者自定义时间段内的锁阻塞趋势。关于锁阻塞类型的详细说明，请参考[官方文档](https://learn.microsoft.com/zh-cn/sql/relational-databases/system-dynamic-management-views/sys-dm-os-wait-stats-transact-sql?view=sql-server-ver16)。
     图2锁阻塞趋势   
     ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002250114333.png "点击放大") 
   
   - 查看阻塞源会话
     查看指定数据库的阻塞源会话。
     图3阻塞源会话   
     ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914594.png "点击放大")
     展开阻塞源后，可看到发生被阻塞的会话详情。
     图4阻塞详情   
     ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002215074426.png "点击放大") 
   
   
   
   
 
#### 锁阻塞界面信息介绍
- 锁阻塞趋势 展示近1天、近1周 、近2周、近1月的阻塞类型趋势，列出了主要可能发生的几种阻塞类型，展示某个时间段各种锁数量的变化趋势。
  图5锁阻塞趋势   
  ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002250114341.png "点击放大")
  表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阻塞源会话   
  ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002214914598.png "点击放大")
   表2阻塞会话列表参数说明 
  | 参数名称      | 说明                                           |
  |:---|:---|
  | SPID     | 阻塞源会话ID。                                   |
  | QueryHash | 阻塞源会话QueryHash。                               |
  | 等待类型       | 阻塞源等待类型。                                    |
  | 执行耗时(ms) | 阻塞源会话执行耗时。由于是采样模式，可以把最后一次采样中的执行耗时，认为是会话总耗时。 |
  | SQL        | 阻塞源执行SQL，点击可以查看详情。                            |
  | 采集时间       | 阻塞源采集时间。                                     |
  | 数据库       | 阻塞源SQL运行数据库。                                 |
  | 客户端HostName | SQL 请求端HostName。                               |
  | 客户端名称   | SQL 请求端名称。                                  |
  | 请求开始时间    | SQL开始时间。                                    |
  | 登录用户名     | SQL执行用户名。                                  |
     
  
- 阻塞源关系图 展示了，阻塞和被阻塞会话的关系图，鼠标移动到会话上，可展示出会话详情。
  图7阻塞源关系图   
  ![](https://support.huaweicloud.com/usermanual-rds-mssql/zh-cn_image_0000002250114329.png "点击放大")
  表3阻塞关系图参数说明 
  | 参数         | 说明                                                         |
  |:---|:---|
  | SPID      | 会话ID。                                                      |
  | 等待类型         | 阻塞类型。可参考[表2]。 |
  | CPU时间（ms）    | SQL运行CPU时间。                                                |
  | 数据库         | SQL执行数据库。                                                  |
  | 客户端HostName | SQL 请求端HostName。                                         |
  | 客户端名称      | SQL 请求端名称。                                                 |
  | 登录用户名       | SQL执行用户名。                                                   |
  | 请求开始时间      | SQL开始时间。                                                  |
  | SQL          | SQL文本，可复制。                                                 |
     
  
 
