注册
事务相关SQL日志解析
专栏/培训园地/ 文章详情 /

事务相关SQL日志解析

执生 2024/12/02 348 0 0
摘要

SQL跟踪日志用于记录用户执行的SQL语句、参数信息、错误信息等。用户可以通过设置INI参数SVR_LOG来开启SQL日志功能,并且可以在sqllog.ini文件中进行SQL日志的详细配置,例如指定SQL日志中需要被记录的语句类型、SQL日志文件切换模式以及SQL日志占用空间等,详细介绍请参考《DM8系统管理员手册》。
为了帮助用户更好分析SQL日志,本文档将针对事务相关SQL日志中各字段含义进行详细说明。

1、事务启动、提交、回滚日志

  • 事务启动
    事务启动时生成一条SQL日志,如下所示:
2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) TRX: START^M
  • 事务提交
    事务提交时生成一条SQL日志,如下所示:
2023-12-13 11:27:45.003 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) TRX: COMMIT^M

事务提交时的SQL日志也可能包含LSN信息,如下所示:

2023-12-13 11:27:45.003 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) TRX: COMMIT LSN[12592783]^M

LSN[12592783]表示事务提交的回滚记录的lsn。

  • 事务回滚
    事务回滚时生成一条SQL日志,如下所示:
    如下所示:
2023-12-13 11:30:26.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) TRX: ROLLBACK^M

2、事务封锁等待日志

当事务因封锁冲突而产生封锁等待时,生成相应的SQL日志。
生成SQL日志的时机:事务由wait状态变更为其它状态时记录。
当前存在两种版本的锁等待SQL日志,如果可以准确获取当前事务所等待的其他事务信息,则生成精确版SQL日志。然而在部分场景下无法准确获取当前事务所等待的其他事务信息,典型的如DMDSC场景,有时本地事务仅知道自身对于某个锁发生了锁等待,但是无法获取具体的冲突信息,因此只能打印粗略版SQL日志。
精确版SQL日志如下所示:

2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) trx[480521] LOCK_TID (mode:X, table 
id:1143) wait for 3 trxs, trx[480511, 480512, 480513] used time:23896(ms)

以上述SQL日志为例,各字段含义如下:

  • trx[480521]
    表示当前事务ID。
  • LOCK_TID
    表示当前锁类型为事务锁。如果为对象锁,则此处将是LOCK_OBJ。
  • mode:X
    X表示当前封锁模式为排他锁,除此之外还可以为S共享锁、IS意向共享锁、IX意向排他锁
  • table id:1143
    表示当前对象ID。
  • wait for 3 trxs
    表示当前事务所等待的事务个数为3。
  • trx[480511, 480512, 480513]
    表示当前事务等待的3个事务的ID分别为480511、480512、480513。
  • used time:23896(ms)
    表示本次锁等待的总时间。

粗略版SQL日志如下所示:

2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) trx[480521] LOCK_TID (mode:X, table
 id:1143, tid[480511]) wait used time:23896(ms)

以上述SQL日志为例,各字段含义如下:

  • tid[480511]
    表示当前事务等待的事务ID为480511。由于该SQL日志为粗略版SQL日志,因此当前事务可能不止等待这一个事务,但是当前节点无法获取更多的等待事务信息,用户可以通过追溯ID为480511的事务来手动分析获取更多信息。
    对于其他字段,含义同精确版SQL日志。

对于以上粗略版SQL日志,由于是LOCK_TID类型,至少会打印一个等待事务ID,根据该事务ID可以进一步追溯其他等待事务信息。但如果是LOCK_OBJ类型的粗略版SQL日志,则可能不会打印等待事务ID,此时需要根据当前对象名,检查附近日志中是否有对该对象的操作,以此来进一步分析事务封锁冲突,该方法不保证能成功检索到冲突操作。比如对触发器对象的封锁冲突,因为SQL日志中不会打印触发器名因此无法检索。

3、回滚页相关日志

当申请、清理回滚页时,生成相应的SQL日志。

  1. alloc pseg page日志
    表示预申请回滚页空间。
    生成时机:预申请回滚页空间。
2024-03-15 14:14:20.362 (EP[0] sess:0x7f9740010bd8 thrd:8139 user:SYSDBA 
trxid:32072 stmt:NULL appname:disql) trx[32072] alloc pseg page[0, 28557], 
page_lsn[10612892], n_pages[13843]

以上述SQL日志为例,各字段含义如下:

  • trx[32076]
    表示当前事务ID。
  • alloc pseg page[0, 28557]
    两个数值依次表示回滚页的文件id,回滚页的页ID。
  • page_lsn[10612892]
    回滚页的LSN。
  • n_pages[13843]
    事务实际使用的回滚页个数。
  1. PURG2_PAGE
    表示PURGE一个回滚页。
    生成时机:purge一个回滚页。
2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) trx[32076]: purg2_page free pseg 
page (0, 14169), page_lsn = 14169

以上述SQL日志为例,各字段含义如下:

  • trx[32076]
    表示当前事务ID。
  • pseg_page_free_for_insert_only_trx
    接口名,purge一个回滚页。
  • free pseg page (0, 14169)
    两个数值依次表示回滚页的文件id,回滚页的页ID。
  • page_lsn = 14169
    回滚页的页id。
  1. pseg_reset_last_page
    清理事务槽,重置最后一个回滚页信息。
    生成时机:对事务执行回滚操作。
2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) trx[32076]: pseg_reset_last_page 
free pseg page (0, 14169)

以上述SQL日志为例,各字段含义如下:

  • trx[32076]
    表示当前事务ID。
  • pseg_reset_last_page
    接口名,清理事务槽,重置最后一个回滚页信息。
  • free pseg page (0, 14169)
    两个数值依次表示回滚页的文件id,回滚页的页ID。
  1. PSEG_ROLLBACK
    对事务执行回滚操作。
    生成时机:对事务执行回滚操作。
2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) trx[32076]: pseg_rollback free pseg
 page (0, 14169) page_lsn[12592786]

以上述SQL日志为例,各字段含义如下:

  • trx[32076]
    表示当前事务ID。
  • pseg_rollback
    接口名,表示对事务执行回滚操作。
  • free pseg page (0, 14169)
    两个数值依次表示回滚页的文件id,回滚页的页ID。
  • page_lsn[12592786]
    回滚页的lsn。
  1. pseg_page_free_for_insert_only_trx
    表示纯INSERT事务提交时,进行释放回滚页操作。
    生成时机:事务提交的第2阶段
2023-12-13 11:25:46.537 (EP[0] sess:0x7f23a823c1e8 thrd:31811 user:SYSDBA 
trxid:480521 stmt:NULL appname:manager.exe) trx[32076]: 
pseg_page_free_for_insert_only_trx free pseg page (0, 14169), page_lsn = 
12592786

以上述SQL日志为例,各字段含义如下:

  • trx[32076]
    表示当前事务ID。
  • pseg_page_free_for_insert_only_trx
    接口名,纯insert事务提交时,进行释放回滚页操作。
  • free pseg page (0, 14169)
    两个数值依次表示回滚页的文件id,回滚页的页ID。
  • page_lsn = 12592786
    回滚页的lsn。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服