sql server 阻塞

问题的起源,

一个存储过程去调用另外一个存储过程(计算一个数据库中的在线时间)

中间使用很多循环。

由于外层存储过程增加了事务。在执行外层存储过程的时候有一执行时间过长,

如果取消了整个事务,就会导致相关的表被阻塞。

 

 

使用如下语句查看阻塞是否存在

  SELECT blocking_session_id, wait_duration_ms, session_id FROM sys.dm_os_waiting_tasks
  WHERE  blocking_session_id is NOT null

查看连接的一些信息

select connect_time,last_read,last_write,most_recent_sql_handle      
from sys.dm_exec_connections where session_id in(95)

查看会话信息

select login_time,host_name,program_name,login_name,last_request_start_time,last_request_end_time     
from sys.dm_exec_sessions where session_id in(95)

查看正在执行阻塞的请求

select     
    session_id,blocking_session_id,wait_type,wait_time,wait_resource    
from     
    sys.dm_exec_requests    
where   
    blocking_session_id>0

如图所示,根据等待类型和等待执行查看是由于

OBJECT,670625432 被锁住了,查看这个OBJECT的名字可以知道他是一个表

 


查明原因后,使用kill 语句把对应的SPID kill 掉就可以了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值