K M*_*ao 8 sql-server locking row
有没有办法列出锁定的表并杀死交易,如果我们希望它们立即解锁.
或者我正在寻找上述操作需要遵循的其他术语.
任何帮助或指导将不胜感激.
Mit*_*eat 13
这将显示所有具有独占锁定的数据库(可能包括在运行时保持的瞬态锁定),使用 sys.dm_tran_locks
DMV:
select d.*, l.* from sys.dm_tran_locks l
join sys.databases d on l.resource_database_id = d.database_id
where l.request_mode = 'X'
Run Code Online (Sandbox Code Playgroud)
(X =独占,S =共享,IS =意图共享)请参阅锁定模式.
但最好的方法是打开Trace Flags 1204和1222:
跟踪标志1204和跟踪标志1222当发生死锁时,跟踪标志1204和跟踪标志1222返回在SQL Server 2005错误日志中捕获的信息.跟踪标志1204报告由死锁中涉及的每个节点格式化的死锁信息.跟踪标志1222格式化死锁信息,首先是进程,然后是资源.可以启用两个跟踪标志以获得同一死锁事件的两个表示.
参考:检测和结束死锁
另外,运行sp_who2
并查找BlkBy
(Blocked By)列中的条目 ; 按照这些,直到你到达僵局链的头部.这是负责的进程标识符(或PID).
要获取在特定进程后面运行的sql,您可以运行:
dbcc inputbuffer (@pid)
Run Code Online (Sandbox Code Playgroud)
并使用该PID来杀死进程(谨慎并且风险自负):
kill @pid
Run Code Online (Sandbox Code Playgroud)
另外读取阻塞不是死锁(区分这两种情况)
归档时间: |
|
查看次数: |
19676 次 |
最近记录: |