SQL Server死锁日志分析(打开1204标记)

关于SqlServer高并发死锁现象的分析排查 通过定期对生成环境SqlServer日志的梳理,发现经常会出现类似事务与另一个进程被死锁在资源上,并且已被选作死锁牺牲品,请重新运行该事务的异常 简单分析一下原因:在高并发场境下,多个事务同时对某个资源进行持锁 [ 读/写 ] 操作,同时又需要对方释放锁资源,进而出现死锁 阅读详情

使用跟踪标记 1204

--打开跟踪标记
DBCC TRACEON (1204,-1)

--关闭跟踪标记
DBCC TRACEOFF (1204,-1)


处于死锁状态时,跟踪标记 1204 在等待的线程、存在等待线程的资源和控制这些资源的线程间画出相关循环。

跟踪标记 1204 报告中的术语
尽管根据所涉及的资源,跟踪标记 1204 会返回不同信息,但是报告通常会包含如下术语:

Node 节点:x
在死锁的链中表示项目号 (x)。

List 列表
锁的所有者可能是如下列表中的一部分:授权、转换和等待。

Grant List 授权列表
列举资源的当前所有者。

转换列表
列举要把锁转换到较高级别的当前所有者。

Wait List 等待列表
列举当前新锁对资源的请求。
SPID:x ECID:x

在并行进程情况下,标识系统进程 ID 线程。条目 SPID x ECID 0 表示主线程,而 SPID x ECID > 0 表示同一 SPID 的子线程。

Statement Type 语句类型
为 SELECT, INSERT, UPDATE 或 DELETE 语句,线程在这些语句上具有权限。

行号
发生死锁时,列出当前正在执行的批处理语句行。

Input Buf
列出当前批处理中所有的语句。

Mode
为线程请求、授权或等待的特定资源,指定锁的类型。模式可以是 IS(意向共享)、S(共享)、U(更新)、IX(意向独占)、SIX(与意向独占共享)和 X(独占)。有关更多信息,请参见SQL Server 中的锁定介绍。

RID
在对锁进行控制或请求的表中,标识单个行。

RID 在跟踪标记 1204 中,表示为 RID:db_id:file_id:page_no:row_no;例如,RID: 1:1:1253:0。

TAB
标识对锁进行控制或请求的表。
TAB 在跟踪标记 1204 中表示为 TAB:db_id:object_id;例如,TAB: 2:2009058193。

KEY
在对锁进行控制或请求的索引内,标识键范围。
KEY 在跟踪标记 1204中表示为 KEY:db_id:object_id:index_id;例如,KEY: 2:1977058079:1。

PAG
标识对锁进行控制或请求的页资源。
PAG 在跟踪标记 1204 中表示为 PAG:db_id:file_id:page_no;例如 PAG: 7:1:168。

EXT
标识扩展盘区结构。
EXT 在跟踪标记 1204 中表示为 EXT:db_id:file_id:extent_no;例如,EXT: 7:1:9。

DB
标识数据库锁。
DB 在跟踪标记 1204 中表示为如下方式之一:

DB:db_id
DB:db_id[BULK-OP-DB] 标识了备份数据库占用的数据库锁。
DB:db_id[BULK-OP-LOG] 标识了特定数据库的备份日志占用的锁。
IND

标识在索引资源上创建的索引占用的锁。

IND 在跟踪标记 1204 中表示为如下方式之一:
IND:db_id:object_id:index_id
IND:db_id:object_id:index_id[INDEX_ID] 表明锁在索引 ID 上。
IND:db_id:object_id:index_id[INDEX_NAME] 表明锁在索引名上。

APP
标识应用程序资源占用的锁。
APP 在跟踪标记 1204 中表示为APP:lock_resource;例如,APP:Formf370f478。

当 SQL Server 选取应用程序资源为死锁牺牲品时,该应用程序资源的所有者将不会得到先前描述的错误信息。相反,当 sp_getapplock 存储过程在该应用程序资源上执行时,应用程序所有者会获得返回代码"-3"。有关信息,请参见 sp_getapplock。

Victim Resource Owner
将 SQL Server 选择的特殊线程指定为中断死锁循环的牺牲品。选中的线程(以 SPID x ECID 0 标识)和所有现有子线程(以 SPID x ECID > 0 标识)将被终止。

下一个分支
表示来自死锁循环中涉及的相同 SPID 的两个或多个子线程。

当死锁涉及到平行线程时,各种子线程可能会在通讯缓冲区发生阻塞,而且一个线程会在等待别的子线程中结束。只有所有的其它线程都涉及死锁,才会发生死锁状态。下一个分支表示跟踪其它路径的死锁链。

根据PAG锁要找到相关数据库表的方法:

DBCC TRACEON (3604)
DBCC PAGE (db_id,file_id,page_no)
DBCC TRACEOFF (3604)

 

参考:

http://fengyu.china.com/sqlserver_deadlock.htm

 

http://blog.struct.cn/2007/11/29/%E4%BD%BF%E7%94%A8sql-server-profiler%E5%B7%A5%E5%85%B7%E4%BC%98%E5%8C%96sql%E6%9F%A5%E8%AF%A2/

SQLserver查询死锁 DECLARE @SessionName SysName SELECT @SessionName = 'system_health' IF OBJECT_ID('tempdb..#Events') IS NOT NULL BEGIN DROP TABLE #Events END DECLARE @Target_File NVarChar(1000) , @Target_Dir NVarChar(1000) , @Target_File_WildCard NVarCh... 阅读详情

相关推荐

OpenTCS打造移动机器人交通管制系统(四)

先分析下OpenTCS的一些策略方面的东西,这是OpenTCS的基础。 首先需要先明确下OpenTCS内核中的三个概念: 路由(Route) : 决定了车辆通过什么样的方式和算法来获得一段路径,未来车辆将沿着此路径运行。 派遣(Dispacher): 决定了一个订单应该关联哪一辆小车,即为订单分配车辆和为车辆分配订单。 调度(schedule):狭义上的调度,交通管制的核心,决定了何时分配...

白色冰激凌的技术专栏 5272

SQL Server死锁跟踪常用方法

一、利用windows计数器 下面的查询提供了自从上次重启以来在本服务器上发生的所有死锁: SELECT cntr_value AS NumOfDeadLocks FROM sys.dm_os_performance_counters WHERE object_name = 'SQLServer:Locks' AND counter_name = 'Number of Deadl...

Hehuyi_In的博客 1万+

C# .NET6 TesseractOCR 图片文字识别

在你的项目中的tessdata-main文件夹找到这几个文件,并右键->属性设置为【如果较新则复制】有几个需要用到的模型,需要生成的时候复制到输出目录中,在项目中设置即可。TesseractOCR兼容 x86 与 x64。附 :ImageUtils.RegionCropping()源码。Visual Studio 2022 社区版。下载完成后解压在你的项目中,如图所示。从官方项目中获取模型数据, 网址为。

qq_44121554的博客 3854

sqlserver 查日志及死锁记录

2)查询存档编号为n(n Between 0 And 99)的SQL Server日志信息。3)根据时间范围查询SQL Server日志信息。4)根据时间查看死锁。

gaoduicai的博客 2124

emir分析RC corner如何选择

power analysis阶段 RC corner的选择

weixin_61954252的博客 3595

随机森林遥感反演详细教程

通过这篇文章,我们展示了如何使用Python对筛选后的影响因子进行随机森林建模,并应用于遥感数据反演森林生物量的任务。该流程不仅可以提高预测精度,还能有效处理大规模的遥感数据,为生态监测和森林管理提供重要支持。

热爱分享,热爱记录 2952

SqlServer数据库死锁排查方法

1. 开启数据库死锁日志功能 1.1 在SQLSERVER企业管理器里执行下面 a 命令,开启死锁日志 --a. 开启跟踪死锁 DBCC TRACEON(3605,1204,1222,-1) --b. 关闭信号跟踪 DBCC TRACEOFF(1222,-1) DBCC TRACEOFF(1204,-1) --c.查看信号跟踪是否开启。 DBCC TRACESTATUS(1204,-1) DBCC TRACESTATUS(1222,-1) 1.2 执行命令后,如果发生死锁,可以在数据库日志 或者.

niu_mo_wang的专栏 7633

华为OD机试 - 素数之积 - 数学问题(Java 2025 A卷 100分)

每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天优快云在线答疑。

学Java,找哪吒 2133

如何使用跟踪标记 1204

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

软件开发资料汇总 514

基于YOLOv11的手写数字与符号识别系统设计与实现

手写数字与符号识别系统需要丰富多样的训练数据才能达到理想的泛化性能。MNIST:包含70,000个手写数字样本(0-9),28x28灰度图像优点:干净整齐,适合初学者缺点:多样性不足,只有数字EMNIST:MNIST的扩展,包含数字、字母(大小写)和特殊符号样本量:814,255张图像覆盖62个类别(10数字+26小写字母+26大写字母)HASYv2:专门的手写符号数据集包含369个不同符号类别约168,000个标注实例包括数学符号、箭头、括号等:英文手写文本数据库。

YOLO 292

C#【通用方法】字节数组添加、移除、获取的方法类(妙用List<byte>,开发中常用)

C#【通用方法】添加移除字节的方法类(妙用List,开发中常用)

星Yeah 的博客 3359

Sqlserver 死锁日志 常见字段说明

转自: SQL Server死锁日志分析(打开1204标记) 使用跟踪标记 1204 --打开跟踪标记 DBCC TRACEON (1204,-1) --关闭跟踪标记 DBCC TRACEOFF (1204,-1) 处于死锁状态时,跟踪标记 1204 在等待的线程、存在等待线程的资源和控制这些资源的线程间画出相关循环。 跟踪标记 1204 报告中的术语 尽管

倾听内心的声音 4994

17、高通8155座舱平台--QNX开发基础

我个人习惯,拿到一个新板子,第一件事就是打开IDE,建一个空的QNX项目,然后跑一遍Hello World。比如,当触摸屏被按下时,驱动发一个脉冲给UI进程,告诉它“嘿,有人摸屏幕了”。我在8155上调试时,就遇到过因为脉冲优先级太低,导致触摸响应延迟的问题。IDE自带的编译器是qcc,它其实是gcc的封装。QNX的IPC机制,可以说是它最牛的地方。嗯,这套流程走下来,你对QNX开发的基本功就差不多了。QNX默认的消息缓冲区大小是64KB,如果你要传大块数据,比如音频流,那就得用共享内存了。

woailuojp的博客 53

[SQL]启动SQLServer的死锁检查

启动SQLServer的死锁检查Report Date:   2003/12/11Prepared by:     郑昀Article last modified on 2004-2-16The information in this article applies to:ü        Microsoft SQL Server 2000,7.0陈述:对于数据库死锁,通常可以通过TRACE FL

软件开发资料汇总 560

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

定位数据库死锁,和初步解决死锁办法

1.目前我只是在sql 2008和2005上实验成功: 在数据库开启跟踪标识: DBCC TRACEON(1204,-1)DBCC TRACEON(1222,-1) 这两个跟踪标记都是将死锁写到错误日志中,不过1204是以文本格式进行,而1222是以XML格式保存。 开启后通过查看数据库日志文件就可以找到是那个语句引发死锁。 1.模拟一个死锁: 1 DBCC TRACEON(12...

weixin_30247307的博客 196

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

sqlsever Java监控_SQL Server数据库状态监控 - 错误日志

无论是操作系统(Unix 或者Windows),还是应用程序 (Web 服务,数据库系统等等) ,通常都有自身的日志机制,以便故障时追溯现场及原因。Windows Event Log和SQLServerError Log就是这样的日志, PS: SQL Server 中的错误日志 (Error Log) 类似于Oracle中的alert 文件。一. 错误日志简介1. Windows事件日...

weixin_34096605的博客 638

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Sqlserver 经常数据库锁表的原因,日志文件超出范围。

日志文件超出限制范围,造成无法写入数据库,提交时候卡住的解决方法

skipple11的博客 2068
上一篇: Microsoft SQL Server 管理 (常用管理及维护命令)
下一篇: 吞吐量与IOPS
ynigeng
博客等级 码龄20年 19粉丝 25原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值