死锁信息自动转储

本节主要说明神通数据库发生死锁后对死锁信息进行转储的相关内容。

控制死锁跟踪参数:ENABLE_TRACE_DEAD_LOCK,默认开启死锁信息自动转储,若要关闭请使用:SET ENABLE_TRACE_DEAD_LOCK = FALSE

死锁转储文件路径:数据库安装目录/trace/库名/

示例:

需要保证参数ENABLE_TRACE_DEAD_LOCK为TRUE,如果不为TRUE不会进行转储。

准备两张表 a,b:

create table a(a int);

create table b(a int);

两个会话连接数据库(按照一下步骤顺序执行):

    ①会话1:开启事务,select * from  a;

    ②会话2:开启事务,select * from  b;

    ③会话1:alter table b add column(b int);

    ④会话2:alter table a add column(b int);

    执行完第四步的sql语句,形成死锁,此时在死锁转储文件路径下会新生成一个trace文件。

    上述示例最终产生的死锁信息为:

    Deadlock graph:

    ------------Blocker(s)-----------  ------------Waiter(s)------------

    threadId   session   LWP                 threadId   session   LWP

    22        0      30324             23        1    44732

    23        1      44732             22        0    30324

    ----- Information for waiting sessions -----

    Session:0

    Current SQL :alter table b add column(b int)

    Logontime:2021-12-03 17:12:56

    CurrentUserName:SYSDBA

    HostIp:127.0.0.1

    Program:isql.exe

    CurrentXid:3774480385

    Wait Event:

        RelationLockWait:24 Relation Oid:35266 Lock Mode:16

    Session:1

    Current SQL :alter table a add column(b int)

    Logontime:2021-12-03 17:13:33

    CurrentUserName:SYSDBA

    HostIp:127.0.0.1

    Program:isql.exe

    CurrentXid:2579562497

    Wait Event:

        SegmentLockWait:23 Page Id:-1 File Id:65535 Lock Mode:16

    ----- End of information for waiting sessions -----