SQL Block的初级排查

使用下面的语句来找到被block的session.

select a.blocking_session_id, * from sys.dm_exec_requests a where a.blocking_session_id <> 0

 

使用下面的语句来找出阻塞其他session的session, 即阻塞其他人, 但自己没被阻塞.

select kpid, *  from sys.sysprocesses where spid in
(select blocked from sys.sysprocesses)
and blocked = 0

 

如果通过上面的语句你拿到了session的SPID, 那么你可以通过下面的语句得到这个session当下正在做的事. 其中125是session的SPID.

DBCC INPUTBUFFER(125)

 

使用下面的语句来找到该session所对应的客户端的信息, 比如说机器名, IP, 端口.

select a.host_process_id,
a.host_name,
a.client_interface_name, 
a.login_name,
b.wait_type, 
b.wait_time,
c.client_net_address,
c.client_tcp_port
from sys.dm_exec_sessions a, sys.dm_exec_requests b, sys.dm_exec_connections c
where a.session_id = b.session_id and b.session_id = c.session_id
and a.session_id = 108

 

一些简单的基础知识.

sys.sysprocesses这个系统视图包含SQL实例中的各项操作(processes)的信息. 这些操作可以是系统操作也可以是客户端操作.
DBCC INPUTBUFFER (session_id)显示从客户端发送到 Microsoft SQL Server 实例的最后一个语句
sys.dm_exec_sessions该以服务器为范围的视图视图显示所有活动用户的数据库连接还有内部的任务. 信息包括客户端版本, 客户端程序名, 登录时间, 登录用户等等. 可以首先使用这个视图来查看当前系统的负载, 以及发现感兴趣的session, 之后再用其他的动态管理视图或动态管理函数来获取该session的更多信息.
sys.dm_exec_requests返回有关在 SQL Server 中执行的每个请求的信息
sys.dm_exec_connections 返回该数据库实例上的连接以及每个连接的具体信息.

 

参考资料

====================

sys.sysprocesses

http://msdn.microsoft.com/en-us/library/ms179881.aspx

DBCC INPUTBUFFER

http://technet.microsoft.com/zh-cn/library/ms187730.aspx

sys.dm_exec_sessions

http://msdn.microsoft.com/en-us/library/ms176013.aspx

sys.dm_exec_requests

http://msdn.microsoft.com/zh-cn/library/ms177648.aspx

sys.dm_exec_connections

http://msdn.microsoft.com/en-us/library/ms181509.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值