SQL优化中的重要概念:阻塞

Posted lonelyxmas

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL优化中的重要概念:阻塞相关的知识,希望对你有一定的参考价值。

原文:SQL优化中的重要概念:阻塞

 

上一篇讲到锁定的概念,那么接下来就是如何找到由于锁定而发生阻塞的进程,并解决阻塞问题。



1、会话1,修改数据,但没有提交事务

  1. BEGIN TRAN
  2. select @@SPID --输出:287
  3. UPDATE t
  4. SET v = ‘88888‘
  5. WHERE idd = 1

2、会话2,由于会话一事务没有提交,导致阻塞

  1. BEGIN TRAN
  2. select @@SPID --输出:105
  3. UPDATE t
  4. SET v = ‘888‘
  5. WHERE idd = 1
  6. --查询会话1的等待信息
  7. select session_id, --查询的会话,也就是被阻塞的会话
  8. wait_duration_ms, --等待毫秒数
  9. wait_type, --等待类型,如:LCK_M_X表示正在等待获取排他锁
  10. blocking_session_id --阻塞session_id会话的会话
  11. from sys.dm_os_waiting_tasks
  12. where session_id = 105

3、查询这个被阻塞的会话请求的资源情况

从输出结果看,会话2在update时一共获取了4个锁,共享数据库锁、2个意向独占锁(锁定表、数据页),
一个键锁锁住那条要更新的记录,只有这个键锁的请求状态时wait,
其他3个锁状态为grant表示已经会话2已经获得了锁。

  1. select resource_type,
  2. request_status,
  3. request_mode,
  4. request_session_id
  5. from sys.dm_tran_locks
  6. where request_session_id = 105

另一种查看阻塞会话的方法,查看当前会话的执行请求:

  1. select session_id,
  2. status,
  3. blocking_session_id,
  4. wait_type,
  5. wait_time
  6. from sys.dm_exec_requests
  7. where session_id = 105

4、 设置等待锁释放的时间
由于阻塞一段时间后,可能会超过设置的等待时间,返回锁定错误,所以,我们可以设置超时时段,以毫秒为单位。

发布了416 篇原创文章 · 获赞 135 · 访问量 94万+

以上是关于SQL优化中的重要概念:阻塞的主要内容,如果未能解决你的问题,请参考以下文章

SQL优化中的重要概念:事务

SQL优化中的重要概念:锁定

缺少 SQL SERVER 2014 代码片段

如何进行SQL性能优化

SQL性能优化,太太太太太太太有用了!

动态SQL基础概念复习(Javaweb作业5)