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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2010-08-20 Log Parser分析IIS log的一个简单例子