gpt4 book ai didi

sql-server - 如何查找被锁定的表名(特定于任何事务)

转载 作者:行者123 更新时间:2023-12-04 02:59:25 25 4
gpt4 key购买 nike

如果我们希望它们立即被解锁,有没有办法列出锁定的表并杀死事务。

或者,对于我正在寻找的上述操作,我们还需要遵循任何其他术语。

任何帮助或指导将不胜感激。

最佳答案

这将使用 sys.dm_tran_locks 显示所有持有排他锁的数据库(可能包括在运行时持有的临时锁)。车管所:

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'

(X = 独占,S = 共享,IS = 意图共享)参见 Lock Modes .

但可能最好的方法是打开 Trace Flags 1204 和 1222:

Trace Flag 1204 and Trace Flag 1222 When deadlocks occur, trace flag 1204 and trace flag 1222 return information that is captured in the SQL Server 2005 error log. Trace flag 1204 reports deadlock information formatted by each node involved in the deadlock. Trace flag 1222 formats deadlock information, first by processes and then by resources. It is possible to enable both trace flags to obtain two representations of the same deadlock event.



引用: Detecting and Ending Deadlocks

另外,运行 sp_who2并在 BlkBy 中查找条目(Blocked By) 栏;遵循这些直到你到达死锁链的头部。那是负责的进程标识符(或PID)。

要获取在特定进程后面运行的 sql,您可以运行:
dbcc inputbuffer (@pid)

并使用该 PID 终止进程(谨慎行事,风险自负):
kill @pid

退房 Who is Active? v10.00: DMV Monitoring Made Easy

另请阅读 Blocking is not Deadlocking (区分两种情况)

关于sql-server - 如何查找被锁定的表名(特定于任何事务),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4459167/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com