clog 是事务日志,记录了事务的 redo log 以及事务的状态。本文讲述如何使用 ob_admin 的 log tool 来分析 clog 日志,判断事务的最终状态是提交还是回滚。
适用版本
OceanBase 数据库 V4.x 版本。
ob_admin clog 命令
使用 ob_admin 打印 clog 日志的命令如下。
ob_admin log_tool dump_filter '<filter_name>' <clog_file_name>
clog_file_name为指定 clog 文件名。clog_file_name可以包含文件路径。filter_name的取值如下:过滤条件名称 说明 tablet_id数据表标识符 tx_id事务标识符 filter_name可以单独使用,也可以组合使用。过滤多个条件时,条件名称需要用英文分号(;)隔开。
例如,使用以下命令来打印 101 号 clog 中 tablet_id=123 并且 tx_id=26058724 的日志。
ob_admin log_tool dump_filter 'tablet_id=123;tx_id=26058724' 101
事务相关的日志记录
事务执行时日志记录
在事务执行过程中,如果需要对事务的修改进行持久化,则相应事务将产生日志记录并对其进行持久化,这类日志记录称之为事务执行时日志记录。 事务执行时日志记录的类型如下所示。
| 日志类型 | 内部类型值 | 说明 |
|---|---|---|
OB_LOG_MUTATOR |
0x200 | 事务的 mutator 日志,包含事务的修改内容。 |
OB_LOG_TRANS_STATE |
0x400 | 事务的状态日志。 |
OB_LOG_MUTATOR_WITH_STAT |
0x600 | 事务的状态日志,携带 mutator 日志。 |
OB_LOG_MUTATOR_ABORT |
0x800 | 事务的 abort 日志,用于标记该事务已回滚。 |
事务提交时日志记录
事务进入到提交阶段后,需要对事务的修改进行持久化。在该阶段,根据事务的不同类型,将产生不同类型的事务日志记录。
本地单分区事务的提交时日志记录的类型如下所示。
日志类型 内部类型值 说明 OB_LOG_SP_TRANS_REDO0x20 单分区事务的 redo 日志,包含事务的修改内容(redo 日志)。 OB_LOG_SP_TRANS_COMMIT0x40 单分区事务的 commit 日志,标记该事务已提交,包含事务的修改内容(redo 日志)。 OB_LOG_SP_TRANS_ABORT0x80 单分区事务的 abort 日志,标记该事务已回滚。 分布式事务的提交时日志记录的类型如下所示。
日志类型 内部类型值 说明 OB_LOG_TRANS_REDO0x1 分布式事务的 redo 日志,包含事务的修改内容(redo 日志)。 OB_LOG_TRANS_PREPARE0x2 分布式事务的 prepare 日志。 OB_LOG_TRANS_REDO_WITH_PREPARE0x3 分布式事务的 prepare 日志,包含事务的修改内容(redo 日志)。 OB_LOG_TRANS_COMMIT0x4 分布式事务的 commit 日志,标记该事务已提交。 OB_LOG_TRANS_ABORT0x8 分布式事务的 abort 日志,标记该事务已回滚。 OB_LOG_TRANS_CLEAR0x10 分布式事务的 clear 日志,用于释放事务上下文信息。