0
点赞
收藏
分享

微信扫一扫

达梦数据库sql日志说明


        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

  • 事务提交

        事务提交时生成一条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

        事务提交时的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]

        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

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]

        事务实际使用的回滚页个数。

  2、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。

  3、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。

  4、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。

  5、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。

举报

相关推荐

0 条评论