標籤:details text 查詢 exec node cut 多少 .net nbsp
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 被鎖定的表名
===================================================================
轉自: 48031459
sql server 查看鎖表SQL【轉】