sql server 查看锁表SQL

Posted 覆雨翻云

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于sql server 查看锁表SQL的主要内容,如果未能解决你的问题,请参考以下文章

spring 事务 sqlserver 锁表问题

SQL Server常用命令

sqlserver锁表不能查询吗

Microsoft SQL Server 代码片段收集

查看锁表进程SQL语句

缺少 SQL SERVER 2014 代码片段