执行事务时,如果顺序不一样,会导致sql锁死

本文介绍如何使用SQL Server中的跟踪标记1204来记录和分析死锁情况。通过开启和关闭特定跟踪标记,可以捕获死锁时的锁类型和受影响命令,并将这些信息记录到错误日志中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何使用跟踪标记 1204

-- =====================================================
-- 如何使用跟踪标记 1204
-- 
-- 邹建 2005.08(引用请保留此信息)
-- =====================================================

-- =====================================================
/*-- 说明

跟踪标记 1204 用于返回参与死锁的锁的类型以及当前受影响的命令。死锁信息将自动发送到错误日志。 
开启跟踪标记使用 DBCC TRACEON ,第3个参数指定为-1,表示不单单针对当前connection,而是针对所有包括未来建立的connection
关闭跟踪标记使用 DBCC TRACEOFF

下面是在查询分析器中使用跟踪标记 1204 的演示, 死锁的信息被记录在 SQL Server 日志中,可以通过下面的方法查看:
企业管理器 -- 展开实例 -- 管理 -- SQL Server 日志
由于在企业管理器中查看时, 部分日志信息会被截断, 所以所以建议使用记事本一类的文本查看工具直接查看 /MSSQL/LOG 目录下的 ERRORLOG 文件

有关死锁信息的详细说明参考联机帮助(联机丛书--菜单中的GO--URL--输入下面的地址:
mk:@MSITStore:C:/Program%20Files/Microsoft%20SQL%20Server/80/Tools/Books/trblsql.chm::/tr_servdatabse_5xrn.htm
--*/
-- =====================================================

-- 测试环境

USE tempdb
GO

CREATE TABLE ta(id int)
INSERT ta SELECT 1

CREATE TABLE tb(id int)
INSERT tb SELECT 1
GO

-- 开启死锁记录

DBCC TRACEON(1204,3605,-1)
GO

-- 产生死锁 (查询窗口A)

SET LOCK_TIMEOUT -1
SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ
BEGIN TRAN
SELECT * FROM ta WHERE id=1
WAITFOR DELAY '00:05:00'
UPDATE tb SET id=2 WHERE id=1
COMMIT TRAN
GO

-- 产生死锁 (查询窗口B)

SET LOCK_TIMEOUT -1
SET DEADLOCK_PRIORITY LOW
SET TRANSACTION ISOLATION LEVEL
REPEATABLE READ
BEGIN TRAN
SELECT * FROM tb WHERE id=1
UPDATE ta SET id=2 WHERE id=1
COMMIT TRAN
GO

-- 关闭死锁记录

DBCC TRACEOFF(1204,3605)
GO

-- 清除测试

DROP TABLE ta,tb
GO
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值