SQL死锁进程内容查询语句

1.方式1

bash 复制代码
SELECT   object_name(A.resource_associated_entity_id) as TABLENAME, A.request_session_id AS SPID,
         DB_NAME(B.dbid) AS DBName,B.blocked,B.dbid,B.program_name,B.waitresource,B.lastwaittype,
	     B.loginame,
	     B.hostname,B.login_time,B.last_batch--,B.*
FROM  sys.dm_tran_locks  A  ,sys.sysprocesses B
WHERE resource_type = 'OBJECT' 
     AND request_session_id =B.spid  AND blocked >0

2.方式2

bash 复制代码
 SELECT spid, blocked,sp.dbid, DB_NAME(sp.dbid) AS DBName, object_name(A.resource_associated_entity_id) as TABLENAME,
	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] ,object_name(C.resource_associated_entity_id) as TABLENAME
	FROM sys.sysprocesses AS sp OUTER APPLY sys.dm_exec_sql_text (sp.sql_handle) AS A ,sys.dm_tran_locks C
	WHERE spid > 50  AND blocked >0   AND request_session_id =spid AND resource_type = 'OBJECT' 
	ORDER BY blocked DESC,
	DB_NAME(sp.dbid) ASC,
	a.[text];

3.建立定时LOG记录,避免发生的时候无法抓取

bash 复制代码
--建立LOG表
CREATE TABLE A_LOCK_LOG		                       
(
   login_time  DATETIME ,
   last_batch  DATETIME,
   spid INT, 
   blocked INT,
   TABLENAME  VARCHAR(6000),
   dbid  INT,
   DBName VARCHAR(6000),
   program_name VARCHAR(6000),
   waitresource VARCHAR(6000),
   lastwaittype VARCHAR(6000),
   loginame VARCHAR(6000),
   hostname VARCHAR(6000),
   TextData VARCHAR(6000),
  current_cmd VARCHAR(6000),
  CREATION_DATE		DATETIME	DEFAULT GETDATE()-- 创建时间(派令日期)
);
bash 复制代码
--建立定时作业的进行记录资料
INSERT INTO A_LOCK_LOG(login_time,last_batch,spid,blocked,TABLENAME,dbid,DBName,program_name,waitresource,lastwaittype,loginame,hostname,TextData,current_cmd)
   SELECT login_time,last_batch,spid, blocked,object_name(C.resource_associated_entity_id) as TABLENAME,sp.dbid, 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 ,sys.dm_tran_locks C
	WHERE spid > 50  AND blocked >0   AND request_session_id =spid AND resource_type = 'OBJECT' 
	ORDER BY blocked DESC,
	DB_NAME(sp.dbid) ASC,
	a.[text];

4.模拟上锁机制

bash 复制代码
ALTER PROCEDURE [dbo].[Test]--
     @ERR_NO     INT              OUTPUT,
     @ERR_DESC   NVARCHAR(4000)   OUTPUT

AS
BEGIN
 SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; -- 设置事务隔离级别为 Serializable
    
    BEGIN TRANSACTION;

    -- 锁定目标表
    SELECT * FROM 表名 WITH (TABLOCKX, HOLDLOCK); -- 使用 TABLOCKX 和 HOLDLOCK 提示锁定表,并保持锁定

    -- 模拟长期锁定
    WAITFOR DELAY '00:10:00'; -- 等待10分钟

    COMMIT;
END
相关推荐
2301_800256112 分钟前
第七章 空间存储与索引 知识点梳理-2
数据库·sql·oracle
草莓熊Lotso18 分钟前
【Redis 初阶】 从分布式演进背景到环境搭建全解析
数据库·人工智能·redis·分布式·缓存
倔强的石头_21 分钟前
优化器为什么敢把你写的 LEFT JOIN 悄悄改掉?-国产化金仓 KES 优化器设计思路拆解
数据库
学习-学习24 分钟前
PostgreSQL 19 Beta 值得测吗?并行 Autovacuum、REPACK 到 WAIT FOR LSN 看生产影响
数据库·postgresql
何中应1 小时前
Postgres 搭建主从集群
数据库·postgresql·集群·开发工具
数字新视界1 小时前
档案库房环境安全监控解决方案
大数据·运维·数据库·物联网·环境监控系统
嘘神秘用10 小时前
布:AI 驱动的 Redis 客户端,更快、更直观
数据库·人工智能·redis
东北小狐狸-Hellxz12 小时前
Redis 哨兵搭建+ACL权限控制
数据库·redis
研究员子楚13 小时前
GEO行业发展标准体系白皮书V2.0-第09卷 · 适配篇:硅基主权伦理宪章与行业适配宣言
数据库·人工智能·geo
l1340620823514 小时前
鸿蒙实战:RDB 数据库设计与 DatabaseService
数据库·华为·harmonyos·鸿蒙系统