当前位置:Gxlcms > 数据库问题 > SQL优化中的重要概念:阻塞

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

时间:2021-07-01 10:21:17 帮助过:5人阅读

TRAN
  • select @@SPID --输出:287
  • UPDATE t
  • SET v = ‘88888‘
  • 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优化中的重要概念:阻塞

    标签:like   阻塞   session   _id   获取   数据库   share   获得   问题   

    人气教程排行