SQL Server 查看进程阻塞及处理
修改或删除数据前先备份,先备份,先备份(重要事情说三遍)!
1、首先,查看线程,分析是否存在阻塞进程,blocked>0都是当前被阻塞的进程
SELECT * FROM sysprocesses where blocked >0 order by blocked ;
2、找到被阻塞的线程后,想要继续查看进程被谁阻塞,分析导致阻塞的源头
SELECT * FROM SYSPROCESSES WHERE spid =spid_no(这是你要分析的进程ID)
3、查看此进程执行的SQL 是哪个,查找问题原因
dbcc inputbuffer(spid);
4、如果想要结束当前进程,KILL 掉当前导致阻塞的SQL
kill spid
以上是手工分析,当前生产有哪些阻塞并自动分析出来源头,我下面提供一个自己整理的自动分析过程,亲测有效,可直接使用:
use master
go
declare @spid int,@bl int
DECLARE s_cur CURSOR FOR
select 0 ,blocked
from (select * from sysprocesses where blocked>0 ) a
where not exists(select * from (select * from sysprocesses where blocked>0 ) b
where a.blocked=spid)
union select spid,blocked from sysprocesses where blocked>0
OPEN s_cur
FETCH NEXT FROM s_cur INTO @spid,@bl
WHILE @@FETCH_STATUS = 0
begin
if @spid =0
select '引起数据库死锁的是:
'+ CAST(@bl AS VARCHAR(10)) + '进程号,其执行的SQL语法如下'
else
select '进程号SPID:'+ CAST(@spid AS VARCHAR(10))+ '被' + '
进程号SPID:'+ CAST(@bl AS VARCHAR(10)) +'阻塞,其当前进程执行的SQL语法如下'
DBCC INPUTBUFFER (@bl )
FETCH NEXT FROM s_cur INTO @spid,@bl
end
CLOSE s_cur
DEALLOCATE s_cur
最新文章
- [Keras] Develop Neural Network With Keras Step-By-Step
- word2vec参数调整 及lda调参
- 搭建GoldenGate的单向复制环境
- 使用adb shell 进入手机修改文件的权限
- OF寄存器的判断
- 重构Web Api程序(Api Controller和Entity)续篇
- O(nlogn)LIS及LCS算法
- div中嵌套div水平垂直居中
- MySQL解决插入emoji表情失败的问题
- [ionic开源项目教程] - 第5讲 如何在项目中使用全局配置
- nginx 健康检查和负载均衡机制分析
- oracle数据库导出并重新导入
- 关于MATLAB处理大数据坐标文件2017620
- CF1097G Vladislav and a Great Legend
- JavaScript开发区块链只需200行代码
- db2 v11 安装测试
- tensorRT 构建推理引擎
- ---github git clone 加速
- (笔记)Linux内核中内存相关的操作函数
- eclipse中开发js会卡,去掉.project中的validate即可