SQL SERVER 死鎖

 sp_locksql

查看鎖表名稱session

 

select request_session_id spid,OBJECT_NAME(resource_associated_entity_id) tableName
from sys.dm_tran_locks where resource_type='OBJECT'

spid 鎖表進程
tableName 被鎖表名

解鎖:
kill  spidspa

 

DBCC INPUTBUFFER(spid)  --查看改進程的sql 語句code

 

blocked爲0的是引發死鎖的,blocked不爲0的是被等待的進程,等待釋放資源的才繼續執行。等待資源。waitResourceblog

 

 

SELECT
    spid,
    blocked,
    DB_NAME(sp.dbid) AS DBName,
    program_name,
    waitresource,
    lastwaittype,
    sp.loginame,
    sp.hostname,
    a.[Text] AS [TextData],
    SUBSTRING (
        A. TEXT,
        sp.stmt_start / 2,
        (
            CASE WHEN sp.stmt_end = - 1 THEN DATALENGTH (A. TEXT) ELSE sp.stmt_end END - sp.stmt_start
        ) / 2
    ) AS [current_cmd] 
    FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A 
    WHERE spid > 50 and  spid in(  select request_session_id spid 
from sys.dm_tran_locks where resource_type='OBJECT')
    ORDER BY blocked DESC,
    DB_NAME(sp.dbid) ASC,
    a.[text]

--查看鎖搶奪資源
sp_lock


 

例如A進程(鎖住資源未提交未完成)進程

begin tran
update c_FeeType  set DM=dm

ci

B進程(等待)資源

select * from c_FeeTypecmd

 

SELECT * FROM SYS.partitions WHERE hobt_id=72057594050445312
SELECT * FROM r_register where %%lockres%% = '(a791659675d9)'
 
 
fdquery selct*from  沒有FetcheALL,其餘進程update時搶不到資源,鎖住了。
相關文章
相關標籤/搜索