sp_lock

查看锁表名称

 查看进程信息

select *from FROM sys.sysprocesses --全部进程

select *from FROM sys.sysprocesses where sp=xxx--指定进程

sp_who active --看看哪个引起的死锁, blk里面即阻塞的spid;

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

spid 锁表进程
tableName 被锁表名

解锁:
kill  spid

 

DBCC INPUTBUFFER(spid)  --查看改进程的sql 语句

 

blocked为0的是引起死锁的,blocked不为0的是被等待的进程,等待释放资源的才继续执行。等待资源。waitResource

 

 

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

B进程(等待)

select * from c_FeeType

 

SELECT * FROM SYS.partitions WHERE hobt_id=72057594050445312
SELECT * FROM r_register where %%lockres%% = '(a791659675d9)'
 
 
fdquery selct*from  没有FetcheALL,其他进程update时抢不到资源,锁住了。
 
 
posted on 2019-01-26 17:10  lypzxy  阅读(287)  评论(0编辑  收藏  举报