Pg XLOG文件(常说的REDOLOG)名字的命名方法是在XLogFileName宏里定义的,分别由时间线ID、日志ID、段ID的八位16进制数依次构成。例如00000001000000010000008F。
#define XLogFileName(fname,tli, log, seg) snprintf(fname, MAXFNAMELEN, "%08X%08X%08X", tli, log, seg)不同的段ID对应不同的物理XLOG日志文件,日志ID是逻辑概念,有多个物理XLOG日志文件组成。Pg XLOG文件(常说的REDOLOG)的大小初始值是在configure.in和configure文件里设置的,默认大小是16M。大小设置形式如下wal_segsize=16XLOG_SEG_SIZE (${wal_segsize} * 1024 * 1024)=16M这个XLOG_SEG_SIZE是XLOG日志文件的段大小,就是一个物理的日志文件的大小。一个逻辑的XLOG日志文件大小是4Gb。 Pg XLOG文件的存储格式大致如下:<PageHeaderData><XLogRecord><rmgr-specific data><BkpBlock><XLogRecData>里面包括<CheckPoint>等<BkpBlock><XLogRecData><BkpBlock><XLogRecData>…… 1先看<PageHeaderData>,这个根据不同情况对应XLogLongPageHeaderData或XLogPageHeaderData结构。XLOG文件头用XLogLongPageHeaderData结构和一些合适场合,XLogPageHeaderData用在文件里的页面头。结构XLogLongPageHeaderData的第一个成员是结构XLogPageHeaderData。下面是这两个结构定义:
typedefstruct XLogLongPageHeaderData{ XLogPageHeaderDatastd; /*页头结构*/
uint64 xlp_sysid; /* 控制文件pg_control里的系统标识符*/ uint32 xlp_seg_size; /* XLOG文件大小 */ uint32 xlp_xlog_blcksz; /* XLOG文件页面大小 */} XLogLongPageHeaderData; XLOG文件里的页面头结构
typedefstruct XLogPageHeaderData{ uint16 xlp_magic; /* WAL版本指示器 */ uint16 xlp_info; /* flag bits, see below */ TimeLineIDxlp_tli; /* 本页第一个记录的时间线*/ XLogRecPtrxlp_pageaddr; /* 本页XLOG位置*/} XLogPageHeaderData; XLOG文件里的页面头结构XLogPageHeaderData的成员xlp_magic表示WAL版本号。成员xlp_tli表示本页第一个记录的时间线,成员xlp_pageaddr表示本页的XLOG位置。成员xlp_info表示紧跟页头的记录是否是跨页记录的一部分,或者该页头结构XLogPageHeaderData是否在文件头结构XLogLongPageHeaderData里。其值定义见下面:当记录跨页时,在后面的页头里设置标志
#defineXLP_FIRST_IS_CONTRECORD 0x0001这个指明是长页头(多用于文件第一页)
#define XLP_LONG_HEADER 0x0002在xlp_info中定义的所有标志位(用于头的有效性检查)
#define XLP_ALL_FLAGS 0x0003如果成员xlp_info的值是XLP_FIRST_IS_CONTRECORD,表示页头后面跟的是一个跨页结构的一部分。XLOG文件头结构XLogLongPageHeaderData的成员xlp_seg_size表示XLOG文件大小,默认是16M。在configure.in和configure文件里设置形式如下wal_segsize=16XLOG_SEG_SIZE (${wal_segsize} * 1024 * 1024)=16M成员xlp_xlog_blcksz表示文件里的页面大小,默认是8k。
PostgreSQL的存储系统一:控制文件存储结构Oracle RAC 碰到 gc buffer busy相关资讯 PostgreSQL教程
- PostgreSQL 列所有表结构的查询语 (02/18/2013 08:37:22)
- 循序渐进PostgreSQL: 学习pqxx C++ (12/08/2012 11:25:13)
- PostgreSQL 堆分配器mmgr详解 (09/12/2012 09:33:05)
| - PostgresQL中的NUlls first/last功 (01/20/2013 11:55:23)
- PostgreSQL模块——pg_stat_ (11/20/2012 19:27:31)
- PostgreSQL集群方案hot standby初 (07/10/2012 09:42:30)
|
本文评论 查看全部评论 (0)