2010-12-16 14 views
8

如果我们希望立即解锁,有什么办法可以列出锁定表并杀死事务。如何查找锁定的表名(特定于任何事务处理)

还是有任何其他术语,我们需要遵循上述操作,我正在寻找。

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

+1

真的没有必要把你的主题作为你的问题的第一行 - 我们都阅读它。另外,你不需要大写字母,它只是使阅读变得困难。 – Robert 2010-12-16 09:30:19

回答

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' 

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

不过,也许最好的办法是打开跟踪标志1204和1222:

跟踪标志1204和跟踪标志1222 当死锁发生时,跟踪标志1204 和跟踪标志1222返回信息 即在SQL Server 2005错误日志中捕获。跟踪标志1204 报告由死锁中涉及的每个节点格式化的死锁信息 。 跟踪标志1222格式死锁 信息,首先由进程和 然后由资源。有可能 启用两个跟踪标志来获得两个 表示相同的死锁 事件。

价:Detecting and Ending Deadlocks

此外,运行sp_who2和寻找在BlkBy(阻塞者)列中的条目;遵循这些直到你到达僵局链的头部。这是进程标识符(或PID)的责任。

得到什么SQL是落后于特定的过程中,你可以运行:

dbcc inputbuffer (@pid) 

,并使用PID终止该进程(谨慎和风险自负):

kill @pid 

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

又读Blocking is not Deadlocking(区分两种情形)

+0

BlkBy列究竟意味着什么与事务相关的事务由于表已被锁定。以及如何使用PID来终止进程。当我执行“sp_who2”时,我能够SPID列名 – 2010-12-16 10:11:05

+0

sys.dm_tran_locks.request_mode对S,IS和X的含义与上面的查询中一样。你能描述一下吗? – 2010-12-16 10:30:02

+0

@K Maheshwar Rao:这是有帮助的如何关于一些upvote爱? – 2010-12-16 10:35:41