sql server 查看鎖表SQL【轉】


 

1、select * from sys.dm_tran_locks或sp_LOCK 查看request_node 字段中為'X'(排他鎖)或'IX'(意向排他鎖)
2、用sp_who2 + pid(進程ID) 查看進程的詳細信息
3、用dbcc inputbuffer(pid) 查看一起死鎖的語句內容


 發生阻塞時,透過以下命令,可看出是哪個進程 session id,阻塞了哪幾個進程 session id,且期間經過了多少「毫秒 (ms)」。如下圖 3 里 session id = 53 阻塞了 session id = 52 的進程。另透過 SQL Server Profiler 工具,也能看到相同的內容。

SELECT blocking_session_id, wait_duration_ms, session_id FROM sys.dm_os_waiting_tasks 

 

圖 3 本帖前述會話 A 的 UPDATE 語句 (53),阻塞了會話 B 的 SELECT 語句 (52)

透過以下兩個命令,我們還能看到整個數據庫的鎖定和阻塞詳細信息:

SELECT * FROM sys.dm_tran_locks

EXEC sp_lock

 

圖 4 session id = 52 的 process 因阻塞而一直處於等待中 (WAIT)

另透過 KILL 命令,可直接殺掉造成阻塞的 process,如下:

KILL 53

==================================================================
 
        

sp_lock–查詢哪個進程鎖表了,spid:進程ID,ObjId:對象ID 
EXEC sp_executesql N'KILL [spid]'–殺進程 
select object_name([ObjId])–查詢哪張表被鎖,找到其中的objId不為0的那個

– 使用sql語句進行查看 ,鎖定的表名 
select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName 
from sys.dm_tran_locks where resource_type='OBJECT'

spid 鎖表進程 
tableName 被鎖定的表名

=================================================================== 

 轉自: https://blog.csdn.net/xiangbq/article/details/48031459


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM