Welcome 微信登录

首页 / 数据库 / MySQL / PostgreSQL的存储系统二:REDOLOG文件存储结构

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。
  • 1
  • 2
  • 3
  • 下一页
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)
表情: 姓名: 字数