关键字:
KingbaseES、WAL
什么是WAL?
WAL(Write Ahead Log)预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。在使用WAL的系统中,所有的修改在提交之前都要先写入日志中。
为什么需要WAL?
数据持久性:WAL确保了数据持久性,即使系统发生故障或者崩溃,也能保证数据的完整性。
提高性能:WAL可以显著的提高数据库写入性能。相比直接将数据写入磁盘,将数据写入日志文件通常更快,表现为连续写日志文件。此外,WAL可以使用批量写的方式,将多个操作日志一次性写入日志文件,进一步提高性能。
保护数据一致性:WAL保证数据的一致性。在执行修改之前,数据库将相应的日志记录写入日志文件中。这样可以保证在执行修改操作时,如果系统发生故障,可以根据日志文件恢复到修改前状态,避免数据不一致。
支持事物:WAL是支持事物的重要组成部分。WAL可以记录事物执行状态,以及事物中所有的修改操作,以保证事物的ACID。
WAL日志类型
Res Name: 日志类型名称
Rmgr ID: 日志类型所属唯一ID
Description: 日志类型描述
Info Type:日志子类型
Res Name | Rmgr ID | Description | Info Type |
XLOG | RM_XLOG_ID | 和xlog相关的事物日志,包括Checkpoint、日志切换等 | XLOG_RMGR_NEXTOID: XLOG_RMGR_FPW_CHANGE: XLOG_FPI: XLOG_OVERWRITE_CONTRECORD XLOG_END_OF_RECOVERY XLOG_NOOP XLOG_SWITCH XLOG_RESTORE_POINT |
Transaction | RM_XACT_ID | 和事物相关的事物日志,包括事物提交、回滚、两阶段提交等 | XLOG_XACT_COMMIT XLOG_XACT_ABORT XLOG_XACT_PREPARE XLOG_XACT_ASSIGNMENT |
Storage | RM_SMGR_ID | 存储文件的操作,包括创建、截断等 | XLOG_SMGR_CREATE XLOG_SMGR_DELETE XLOG_SMGR_ENCINFO |
CLOG | RM_CLOG_ID | 和事物提交相关的事物日志,事物提交会在clog中记录事物状态 | CLOG_ZEROPAGE |
Database | RM_DBASE_ID | 和数据库相关操作,包括创建、删除等 | XLOG_DBASE_CREATE |
Tablespace | RM_TBLSPC_ID | 和表空间相关的操作产生的事物日志,包括创建、删除等 | XLOG_TBLSPC_CREATE |
MultiXact | RM_MULTIXACT_ID | 在同一个元组上加多个锁产生了MultiXsct的事物日志 | XLOG_MULTIXACT_ZERO_OFF_PAGE XLOG_MULTIXACT_ZERO_MEM_PAGE XLOG_MULTIXACT_CREATE_ID XLOG_MULTIXACT_TRUNCATE_ID |
RelMap | RM_RELMAP_ID | 系统表oid和relFileNode映射信息 | XLOG_RELMAP_UPDATE |
Standby | RM_STANDBY_ID | 和Standby相关的事物日志,包括记录锁信息、事物运行信息等 | KES_XLOG_STANDBY_LOCK KES_XLOG_STANDBY_XACTS KES_XLOG_INVALIDATIONS |
Heap2 | RM_HEAP2_ID | 对Heap进行操作的事物日志,包括对页面的清理操作、tuple冻结等 | WAL_HEAP2_FREEZE_PAGE WAL_HEAP2_CLEAN WAL_HEAP2_CLEANUP_INFO WAL_HEAP2_VISIBLE WAL_HEAP2_MULTI_INSERT WAL_HEAP2_LOCK_UPDATED WAL_HEAP2_REWRITE WAL_HEAP2_NEW_CID |
Heap | RM_HEAP_ID | 对Heap进行操作的事物日志,包括DML操作等 | WAL_HEAP_INSERT WAL_HEAP_DELETE WAL_HEAP_UPDATE: WAL_HEAP_CONFIRM WAL_HEAP_LOCK WAL_HEAP_INPLACE WAL_HEAP2_NEW_CID |
Btree | RM_BTREE_ID | 用于记录操作Btree索引的日志 | XLOG_BTREE_INSERT_LEAF: XLOG_BTREE_SPLIT_L: XLOG_BTREE_VACUUM XLOG_BTREE_DELETE XLOG_BTREE_UNLINK_PAGE: XLOG_BTREE_MARK_PAGE_HALFDEAD XLOG_BTREE_NEWROOT XLOG_BTREE_META_CLEANUP |
Hash | RM_HASH_ID | 用于记录操作Hash索引的日志 | XLOG_HASH_INIT_META_PAGE XLOG_HASH_INIT_BITMAP_PAGE XLOG_HASH_SPLIT_PAGE XLOG_HASH_INSERT XLOG_HASH_DELETE XLOG_HASH_SPLIT_CLEANUP XLOG_HASH_UPDATE_META_PAGE XLOG_HASH_ADD_OVFL_PAGE XLOG_HASH_SPLIT_ALLOCATE_PAGE XLOG_HASH_VACUUM_ONE_PAGE XLOG_HASH_SPLIT_COMPLETE XLOG_HASH_MOVE_PAGE_CONTENTS XLOG_HASH_SQUEEZE_PAGE |
Gin | RM_GIN_ID | 用于记录操作GIN索引的日志 | XLOG_GIN_CREATE_PTREE XLOG_GIN_INSERT XLOG_GIN_SPLIT XLOG_GIN_VACUUM_PAGE XLOG_GIN_VACUUM_DATA_LEAF_PAGE XLOG_GIN_DELETE_PAGE XLOG_GIN_UPDATE_META_PAGE XLOG_GIN_INSERT_LISTPAGE XLOG_GIN_DELETE_LISTPAGE |
Gist | RM_GIST_ID | 用于记录操作GiST索引的日志 | XLOG_GIST_PAGE_UPDATE XLOG_GIST_DELETE XLOG_GIST_PAGE_SPLIT XLOG_GIST_PAGE_DELETE |
SPGist | RM_SPGIST_ID | 用于记录操作SPGist索引的日志 | XLOG_SPGIST_ADD_LEAF XLOG_SPGIST_MOVE_LEAFS XLOG_SPGIST_PICKSPLIT XLOG_SPGIST_ADD_NODE XLOG_SPGIST_SPLIT_TUPLE XLOG_SPGIST_VACUUM_LEAF XLOG_SPGIST_VACUUM_ROOT XLOG_SPGIST_VACUUM_REDIRECT |
BRIN | RM_BRIN_ID | 用于记录操作Brin索引的日志 | XLOG_BRIN_CREATE_INDEX XLOG_BRIN_SAMEPAGE_UPDATE XLOG_BRIN_INSERT XLOG_BRIN_UPDATE XLOG_BRIN_REVMAP_EXTEND XLOG_BRIN_DESUMMARIZE |
Sequence | RM_SEQ_ID | 用于序列操作日志 | NULL |
CommitTS | RM_COMMIT_TS_ID | 事物提交时间戳日志记录 | COMMIT_TS_ZEROPAGE COMMIT_TS_TRUNCATE COMMIT_TS_SETTS |
ReplicationOrigin | RM_REPLORIGIN_ID | 复制源日志记录 | XLOG_REPLORIGIN_SET XLOG_REPLORIGIN_DROP |
Generic | RM_GENERIC_ID | 一种通用的WAL记录类型,来描述对页面的修改(日志记录是页面级的) | NULL |
LogicalMessage | RM_LOGICALMSG_ID | 用于记录逻辑解码相关操作日志 | NULL |
EncryptMethod | RM_METHOD_ID | 用于记录加载/卸载加密设备操作日志 | XLOG_METHOD_LOAD XLOG_METHOD_UNLOAD |
TablespaceEnc | RM_TBLSPC_ENC_ID | 和表空间加密相关的操作产生的事物日志,包括创建、删除等 | XLOG_TBLSPC_CREATE XLOG_TBLSPC_DROP |
TabcloumnEnc | RM_COLUMN_ENC_ID | 用于记录列加密操作日志 | WAL_COLENC_CREATE WAL_COLENC_DROP |
Heap3 | RM_HEAP3_ID | 用于就地更新的日志 | WAL_HEAP3_INPLACE WAL_HEAP3_INPLACE_PBE |
Bitmap | RM_BITMAP_ID | 用于记录Bitmap索引操作日志 | XLOG_BITMAP_INSERT_LOVITEM XLOG_BITMAP_INSERT_META XLOG_BITMAP_INSERT_BITMAP_LASTWORDS XLOG_BITMAP_INSERT_WORDS XLOG_BITMAP_UPDATEWORD XLOG_BITMAP_UPDATEWORDS |
如何查看日志?
sys_waldump --help
Usage:
sys_waldump [OPTION]... [STARTSEG [ENDSEG]]
Options:
-b, --bkp-details output detailed information about backup blocks
--block-size=SIZE set table block size in kB [8]
-e, --end=RECPTR stop reading at WAL location RECPTR
-f, --follow keep retrying after reaching end of WAL
-n, --limit=N number of records to display
-p, --path=PATH directory in which to find log segment files or a
directory with a ./sys_wal that contains such files
(default: current directory, ./sys_wal, $KINGBASE_DATA/sys_wal)
-i, --node-id=nodeid when directory in which to find log segment files,the nodeid don't need to be specified
when directory with a ./data or ./data/sys_wal/ that contains such files,the nodeid must be specified
-r, --rmgr=RMGR only show records generated by resource manager RMGR;
use --rmgr=list to list valid resource manager names
-s, --start=RECPTR start reading at WAL location RECPTR
-t, --timeline=TLI timeline from which to read log records
(default: 1 or the value used in STARTSEG)
-V, --version output version information, then exit
-x, --xid=XID only show records with transaction ID XID
-z, --stats[=record] show statistics instead of records
(optionally, show per-record statistics)
-k, --key-path=PATH file in which to get WAL key
-d, --display-enc display the encryption status of each WAL
-?, --help show this help, then exit
WAL内容介绍
rmgr: 资源名称(日志类型)
len:日志长度
tx:事物ID
lsn:日志编号
prev:上一条日志编号
seqno:sequence number,保证同一个block操作全局有序—RAC增加
desc:日志描述信息。desc 内容以info type开始记录。