导读:数据库
XLOG(RM_XLOG_ID)日志类型记录很杂乱,以下为XLOG类型的wal子类型。post
/* XLOG info values for XLOG rmgr */ #define XLOG_CHECKPOINT_SHUTDOWN 0x00 #define XLOG_CHECKPOINT_ONLINE 0x10 #define XLOG_NOOP 0x20 #define XLOG_NEXTOID 0x30 #define XLOG_SWITCH 0x40 #define XLOG_BACKUP_END 0x50 #define XLOG_PARAMETER_CHANGE 0x60 #define XLOG_RESTORE_POINT 0x70 #define XLOG_FPW_CHANGE 0x80 #define XLOG_END_OF_RECOVERY 0x90 #define XLOG_FPI_FOR_HINT 0xA0 #define XLOG_FPI 0xB0
在数据库关机时会首先执行一次checkpoint,XLOG_CHECKPOINT_SHUTDOWN类型就是记录关机checkpointui
数据库正常运行时也会进行checkpoint,XLOG_CHECKPOINT_ONLINE类型就是记录正常的checkpointthis
此wal类型中可能包含的数据spa
CheckPoint结构体:必定存在,使用XLogRegisterData()注册。.net
typedef struct CheckPoint { XLogRecPtr redo; /* next RecPtr available when we began to * create CheckPoint (i.e. REDO start point) */ TimeLineID ThisTimeLineID; /* current TLI */ TimeLineID PrevTimeLineID; /* previous TLI, if this record begins a new * timeline (equals ThisTimeLineID otherwise) */ bool fullPageWrites; /* current full_page_writes */ uint32 nextXidEpoch; /* higher-order bits of nextXid */ TransactionId nextXid; /* next free XID */ Oid nextOid; /* next free OID */ MultiXactId nextMulti; /* next free MultiXactId */ MultiXactOffset nextMultiOffset; /* next free MultiXact offset */ TransactionId oldestXid; /* cluster-wide minimum datfrozenxid */ Oid oldestXidDB; /* database with minimum datfrozenxid */ MultiXactId oldestMulti; /* cluster-wide minimum datminmxid */ Oid oldestMultiDB; /* database with minimum datminmxid */ pg_time_t time; /* time stamp of checkpoint */ TransactionId oldestCommitTsXid; /* oldest Xid with valid commit * timestamp */ TransactionId newestCommitTsXid; /* newest Xid with valid commit * timestamp */ /* * Oldest XID still running. This is only needed to initialize hot standby * mode from an online checkpoint, so we only bother calculating this for * online checkpoints and only when wal_level is replica. Otherwise it's * set to InvalidTransactionId. */ TransactionId oldestActiveXid; } CheckPoint;
代码中枚举了这种类型的wal日志,可是没有代码能产生这种wal记录类型。rest
任何操做产生一个新的oid会产生这个wal类型日志
此wal类型中可能包含的数据code
新产生的oid(Oid):必定存在,使用XLogRegisterData()注册。
在wal日志发生切换时会产生这个wal类型。
此wal类型中可能包含的数据
无特有数据
执行pg_stop_backup()时会产生这个wal类型
此wal类型中可能包含的数据
XLogRecPtr数据(开始备份的lsn):必定存在,使用XLogRegisterData()注册。
wal_level、wal_log_hints、MaxConnections、max_worker_processes、max_prepared_xacts、max_locks_per_xact、track_commit_timestamp
上述这些对备机很重要的GUC参数若是发生了改变就会产生这个wal类型
执行pg_stop_backup()时会产生这个wal类型
特定描述结构体
typedef struct xl_parameter_change { int MaxConnections; int max_worker_processes; int max_prepared_xacts; int max_locks_per_xact; int wal_level; bool wal_log_hints; bool track_commit_timestamp; } xl_parameter_change;
此wal类型中可能包含的数据
xl_parameter_change结构体:必定存在,使用XLogRegisterData()注册。
创建恢复点时会产生这个wal记录
特定描述结构体
typedef struct xl_restore_point { TimestampTz rp_time; char rp_name[MAXFNAMELEN]; } xl_restore_point;
rp_time:创建恢复点的时间
rp_name:恢复点的名字
此wal类型中可能包含的数据
xl_restore_point结构体:必定存在,使用XLogRegisterData()注册。
若是GUC参数中的full_page_writes发生改变就会记录这个wal类型
此wal类型中可能包含的数据
fullPageWrites(bool):必定存在,使用XLogRegisterData()注册。
数据库完成一次恢复后会产生这个wal类型
特定描述结构体
typedef struct xl_end_of_recovery { TimestampTz end_time; TimeLineID ThisTimeLineID; /* new TLI */ TimeLineID PrevTimeLineID; /* previous TLI we forked off from */ } xl_end_of_recovery;
此wal类型中可能包含的数据
xl_end_of_recovery结构体:必定存在,使用XLogRegisterData()注册。
在开启了page checksum或者wal_log_hints后,数据页发生不重要变化时(好比pageheader一些flag)
也遵循全页写机制。
此wal类型中可能包含的数据
发生变化的page的全部数据:必定存在,经过XLogRegisterBlock()注册。
初始化一个数据页后(初始化索引页时,表页重构时),将此数据页执行FPW写到wal日志中,产生此wal类型。
此wal类型中可能包含的数据
初始化的页数据:必定存在,经过XLogRegisterBlock()注册。