时间:2024-02-13 10:23作者:下载吧人气:22
在生产环境下,有时公司客服反映网页半天打不到,除了在浏览器按F12的Network响应来排查,确定web服务器无故障后。就需要检查数据库是否有出现阻塞
当时数据库的生产环境中主表数据量超过2000w,子表数据量超过1亿,且更新和新增频繁。再加上做了同步镜像,很消耗资源。
这时就要新建一个会话,大概需要了解以下几点:
查询阻塞的方法有很多。有sql 2000 的sp_lock, 有sql 2005及以上的dmv
执行 exec sp_lock
下面列下关键字段
spid 是指进程ID,这个过滤掉了系统进程,只展示了用户进程spid>50。
dbid 指当前实例下的哪个数据库 , 使用DB_NAME() 函数来标识数据库
type 请求锁住的模式
mode 锁的请求状态
总结:当mode 不为GRANT状态时, 需要了解当前锁的模式,以及通过进程ID查找当前sql 语句
例如当前进程ID是416,且mode状态为WAIT 时,查看方式 DBCC INPUTBUFFER(416)
用sp_lock查询显示的信息量很少,也很难看出谁被谁阻塞。所以当数据库版本为2005及以上时不建议使用。
网友评论