Sqlserver死锁查询以及批量解锁方法
Sqlserver死锁查询以及解锁方法
(1)下面是查询死锁进程
1 2 3 4 5 | select request_session_id spid, (死锁进程id) OBJECT_NAME(resource_associated_entity_id) tableName (死锁进程名称) from sys.dm_tran_locks where resource_type= 'OBJECT' (数据类型所有) |
(2)杀死死锁进程
1 2 3 4 5 | declare @spid int //声明id Set @spid = 62 //设置死锁id declare @sql varchar (1000) //声明sql set @sql= 'kill ' + cast (@spid as varchar ) //设置 kill掉死锁进程 exec (@sql) //执行 |
或者
kill 62;
sqlserver 批量kill死锁
1 2 3 | select 'kill ' + CONVERT ( varchar ,request_session_id) ,OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type= 'OBJECT' |
解决sqlserver死锁问题
创造死锁
1 2 3 4 5 6 | -- 开始事务 BEGIN TRANSACTION update job set create_user= '0000' where id = '1' WAITFOR DELAY '02:00' -- 执行查询 select * from job where id = '1' ; |
解决方法
方法一
- 打开sqlserver管理工具,新建sql查询tab
- 执行select * from master.sys.sysprocesses where dbid=db_id(‘数据库名’)
- 然后会查询到具体有哪个在连接到此数据库
- 直接KILL spid的具体数值就可以了
方法二
1 2 3 4 5 6 7 8 9 10 | -- 首先查询 select request_session_id spid, OBJECT_NAME(resource_associated_entity_id) tableName from sys.dm_tran_locks where resource_type= 'OBJECT' -- 然后执行 kill 67; |
注意事项:
有些用户连接可以在kill掉后自动重建,但期间有一段时间,如果碰到这种情况,需要在执行完kill命令后立即执行脱机操作
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。