关键字:
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_CHECKPOINT_SHUTDOWN:
XLOG_RMGR_CHECKPOINT_ONLINE:
XLOG_RMGR_PARAMETER_CHANGE:
XLOG_RMGR_FPW_CHANGE:
XLOG_RMGR_BACKUP_END:
XLOG_FPI:
XLOG_FPI_FOR_HINT
XLOG_OVERWRITE_CONTRECORD
XLOG_END_OF_RECOVERY
XLOG_NOOP
XLOG_SWITCH
XLOG_RESTORE_POINT
Transaction
RM_XACT_ID
和事物相关的事物日志,包括事物提交、回滚、两阶段提交等
XLOG_XACT_COMMIT
XLOG_XACT_COMMIT_PREPARED
XLOG_XACT_ABORT
XLOG_XACT_ABORT_PREPARED
XLOG_XACT_PREPARE
XLOG_XACT_ASSIGNMENT
Storage
RM_SMGR_ID
存储文件的操作,包括创建、截断等
XLOG_SMGR_CREATE
XLOG_SMGR_TRUNCATE
XLOG_SMGR_DELETE
XLOG_SMGR_ENCINFO
CLOG
RM_CLOG_ID
和事物提交相关的事物日志,事物提交会在clog中记录事物状态
CLOG_ZEROPAGE
CLOG_TRUNCATE
Database
RM_DBASE_ID
和数据库相关操作,包括创建、删除等
XLOG_DBASE_CREATE
XLOG_DBASE_DROP
Tablespace
RM_TBLSPC_ID
和表空间相关的操作产生的事物日志,包括创建、删除等
XLOG_TBLSPC_CREATE
XLOG_TBLSPC_DROP
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_HOT_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_INSERT_UPPER:
XLOG_BTREE_INSERT_META:
XLOG_BTREE_SPLIT_L:
XLOG_BTREE_SPLIT_R:
XLOG_BTREE_VACUUM
XLOG_BTREE_DELETE
XLOG_BTREE_UNLINK_PAGE:
XLOG_BTREE_UNLINK_PAGE_META:
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开始记录。