Xlog格式
typedef struct XLogPageHeaderData
{
【校验用magic数字】
uint16 xlp_magic; /* magic value for correctness checks */
【标志位信息】
uint16 xlp_info; /* flag bits, see below */
【时间线信息】
TimeLineID xlp_tli; /* TimeLineID of first record on page */
【当前页面在日志文件中的位置】
XLogRecPtr xlp_pageaddr; /* XLOG address of this page */
【日志跨页面保存,当前页面需要存的剩下的长度】
uint32 xlp_rem_len; /* total len of remaining data for record */
} XLogPageHeaderData;
日志之间有链接关系,xl_prev指向上一条日志的起始位置,下一条日志的位置用xl_tot_len可以找到,日志之间形成“双向链表”。
typedef struct XLogRecord
{
【日记长度】
uint32 xl_tot_len; /* total len of entire record */
【事务ID】
TransactionId xl_xid; /* xact id */
【上一条日志的LSN】
XLogRecPtr xl_prev; /* ptr to previous record in log */
【产生这个记录的动作】
uint8 xl_info; /* flag bits, see below */
【日志记录对应的资源管理器】
RmgrId xl_rmid; /* resource manager for this record */
/* 2 bytes of padding here, initialize to zero