sql server 查看鎖表SQL【轉】

來源:互聯網
上載者:User

標籤: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【轉】

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.