如何使用跟踪标记 1204

2024-01-18 01:48
文章标签 标记 使用 跟踪 1204

本文主要是介绍如何使用跟踪标记 1204,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

如何使用跟踪标记 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

-- 1204 产生的日志记录信息

2005-08-25 08:16:21.85 spid4     Node:1
2005-08-25 08:16:21.85 spid4     RID: 2:1:28:0                  CleanCnt:2 Mode: U Flags: 0x2
2005-08-25 08:16:21.85 spid4      Grant List 0::
2005-08-25 08:16:21.85 spid4        Owner:0x1998aec0 Mode: S        Flg:0x0 Ref:1 Life:02000000 SPID:52 ECID:0
2005-08-25 08:16:21.85 spid4        SPID: 52 ECID: 0 Statement Type: UPDATE Line #: 1
2005-08-25 08:16:21.85 spid4        Input Buf: Language Event: SET LOCK_TIMEOUT -1
SET TRANSACTION ISOLATION LEVEL
    REPEATABLE READ
BEGIN TRAN
    SELECT * FROM tb WHERE id=1
    WAITFOR DELAY '00:01:00'
    UPDATE ta SET id=2 WHERE id=1
COMMIT TRAN

2005-08-25 08:16:21.85 spid4      Requested By: 
2005-08-25 08:16:21.85 spid4        ResType:LockOwner Stype:'OR' Mode: X SPID:51 ECID:0 Ec:(0x19B5B558) Value:0x1997b2c0 Cost:(1/0)

2005-08-25 08:16:21.85 spid4     Node:2
2005-08-25 08:16:21.85 spid4     RID: 2:1:15:0                  CleanCnt:2 Mode: U Flags: 0x2
2005-08-25 08:16:21.85 spid4      Grant List 0::
2005-08-25 08:16:21.85 spid4        Owner:0x1997b3e0 Mode: S        Flg:0x0 Ref:1 Life:02000000 SPID:51 ECID:0
2005-08-25 08:16:21.85 spid4        SPID: 51 ECID: 0 Statement Type: UPDATE Line #: 1
2005-08-25 08:16:21.85 spid4        Input Buf: Language Event: 
SET LOCK_TIMEOUT -1
SET DEADLOCK_PRIORITY LOW
SET TRANSACTION ISOLATION LEVEL
    REPEATABLE READ
BEGIN TRAN
    SELECT * FROM ta WHERE id=1
    WAITFOR DELAY '00:01:00'
    UPDATE tb SET id=2 WHERE id=1
COMMIT TRAN

2005-08-25 08:16:21.85 spid4      Requested By: 
2005-08-25 08:16:21.85 spid4        ResType:LockOwner Stype:'OR' Mode: X SPID:52 ECID:0 Ec:(0x1A24D558) Value:0x1998cfa0 Cost:(0/0)
2005-08-25 08:16:21.85 spid4     Victim Resource Owner:
2005-08-25 08:16:21.85 spid4      ResType:LockOwner Stype:'OR' Mode: X SPID:51 ECID:0 Ec:(0x19B5B558) Value:0x1997b2c0 Cost:(1/0)

-- 分析日志记录信息, 以分析 Node:1 为例, --** 标注的是说明

--** Node:x 在死锁的链中表示项目号 (x)。 
2005-08-25 08:16:21.85 spid4     Node:1
2005-08-25 08:16:21.85 spid4     RID: 2:1:28:0                  CleanCnt:2 Mode: U Flags: 0x2
--** Lists, 可以是授权(Grant)、转换(Convert)和等待(Wait),Grant List列举当前授权的所有者.
2005-08-25 08:16:21.85 spid4      Grant List 0::
2005-08-25 08:16:21.85 spid4        Owner:0x1998aec0 Mode: S        Flg:0x0 Ref:1 Life:02000000 SPID:52 ECID:0
--** 在并行进程情况下,标识系统进程 ID 线程。条目 SPID x ECID 0 表示主线程,而 SPID x ECID > 0 表示同一 SPID 的子线程。 
--** Statement Type: 语句类型
--** Line #:死锁发生时,正在执行的语句的行号
2005-08-25 08:16:21.85 spid4        SPID: 52 ECID: 0 Statement Type: UPDATE Line #: 1
--** input Buf 列出当前批处理中所有的语句。
2005-08-25 08:16:21.85 spid4        Input Buf: Language Event: 
SET LOCK_TIMEOUT -1
SET TRANSACTION ISOLATION LEVEL
    REPEATABLE READ
BEGIN TRAN
    SELECT * FROM tb WHERE id=1
    WAITFOR DELAY '00:01:00'
    UPDATE ta SET id=2 WHERE id=1
COMMIT TRAN

2005-08-25 08:16:21.85 spid4      Requested By: 
--** Mode 为线程请求、授权或等待的特定资源,指定锁的类型。模式可以是 IS(意向共享)、S(共享)、U(更新)、IX(意向独占)、SIX(与意向独占共享)和 X(独占)
2005-08-25 08:16:21.85 spid4        ResType:LockOwner Stype:'OR' Mode: X SPID:51 ECID:0 Ec:(0x19B5B558) Value:0x1997b2c0 Cost:(1/0)




这篇关于如何使用跟踪标记 1204的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/617780

相关文章

Java使用HttpClient实现图片下载与本地保存功能

《Java使用HttpClient实现图片下载与本地保存功能》在当今数字化时代,网络资源的获取与处理已成为软件开发中的常见需求,其中,图片作为网络上最常见的资源之一,其下载与保存功能在许多应用场景中都... 目录引言一、Apache HttpClient简介二、技术栈与环境准备三、实现图片下载与保存功能1.

Python中使用uv创建环境及原理举例详解

《Python中使用uv创建环境及原理举例详解》uv是Astral团队开发的高性能Python工具,整合包管理、虚拟环境、Python版本控制等功能,:本文主要介绍Python中使用uv创建环境及... 目录一、uv工具简介核心特点:二、安装uv1. 通过pip安装2. 通过脚本安装验证安装:配置镜像源(可

LiteFlow轻量级工作流引擎使用示例详解

《LiteFlow轻量级工作流引擎使用示例详解》:本文主要介绍LiteFlow是一个灵活、简洁且轻量的工作流引擎,适合用于中小型项目和微服务架构中的流程编排,本文给大家介绍LiteFlow轻量级工... 目录1. LiteFlow 主要特点2. 工作流定义方式3. LiteFlow 流程示例4. LiteF

使用Python开发一个现代化屏幕取色器

《使用Python开发一个现代化屏幕取色器》在UI设计、网页开发等场景中,颜色拾取是高频需求,:本文主要介绍如何使用Python开发一个现代化屏幕取色器,有需要的小伙伴可以参考一下... 目录一、项目概述二、核心功能解析2.1 实时颜色追踪2.2 智能颜色显示三、效果展示四、实现步骤详解4.1 环境配置4.

使用jenv工具管理多个JDK版本的方法步骤

《使用jenv工具管理多个JDK版本的方法步骤》jenv是一个开源的Java环境管理工具,旨在帮助开发者在同一台机器上轻松管理和切换多个Java版本,:本文主要介绍使用jenv工具管理多个JD... 目录一、jenv到底是干啥的?二、jenv的核心功能(一)管理多个Java版本(二)支持插件扩展(三)环境隔

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Java中Map.Entry()含义及方法使用代码

《Java中Map.Entry()含义及方法使用代码》:本文主要介绍Java中Map.Entry()含义及方法使用的相关资料,Map.Entry是Java中Map的静态内部接口,用于表示键值对,其... 目录前言 Map.Entry作用核心方法常见使用场景1. 遍历 Map 的所有键值对2. 直接修改 Ma

MySQL 衍生表(Derived Tables)的使用

《MySQL衍生表(DerivedTables)的使用》本文主要介绍了MySQL衍生表(DerivedTables)的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学... 目录一、衍生表简介1.1 衍生表基本用法1.2 自定义列名1.3 衍生表的局限在SQL的查询语句select

Mybatis Plus Join使用方法示例详解

《MybatisPlusJoin使用方法示例详解》:本文主要介绍MybatisPlusJoin使用方法示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,... 目录1、pom文件2、yaml配置文件3、分页插件4、示例代码:5、测试代码6、和PageHelper结合6

MySQL分区表的具体使用

《MySQL分区表的具体使用》MySQL分区表通过规则将数据分至不同物理存储,提升管理与查询效率,本文主要介绍了MySQL分区表的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录一、分区的类型1. Range partition(范围分区)2. List partition(列表分区)3. H