PostgreSQL的存储系统一:控制文件存储结构

Pg 控制文件pg_control里存储的数据是一个ControlFileData结构。控制文件尽量保持小于512个字节以使其适合一个典型的磁盘驱动的物理簇的大小。这会减少由于电源故障而写控制文件直接失败的可能性。但控制文件的物理大小是8K,这个远大于512个字节。这样做是为了控制文件格式变化时保持物理大小不变,如果正在读一个不兼容的文件,以使ReadControlFile能传递一个合适的错误版本控制文件信息而代替一个读错误。系统里定义了和自己匹配的控制文件版本变量PG_CONTROL_VERSION,启动时会做系统和控制文件的匹配校验。

1

控制文件里存储了唯一系统标识符、系统状态数据、数据库启动前系统必须恢复到的最小点、检查服务器硬件架构计算能力的字节排序和浮点数格式、数据库的配置兼容backend进程执行的参数、指明类型timestamp、interval、time内部格式的标志、指明不同类型传值(pass-by-value)状态的标志以及所有这些信息的经验和。具体见下面ControlFileData结构。

 

typedefstruct ControlFileData

{

    /*唯一系统标识符——保证控制文件和产生XLOG文件的数据库一致*/

    uint64    system_identifier;

    /*

版本标识符信息。保持这些制度在同一个偏移量,特别是pg_control_version;如果它们改变了他们就不再有用。(由于历史原因他们必须在文件里是8字节,而不是在最前面。)

    pg_control_version标识pg_control自身的格式。

    catalog_version_no标识系统catalog的格式。

    在私有文件里有额外的版本标识符;例如,WAL日志文件每页包含的magic数可以作为WAL日志的版本。

     */

    uint32    pg_control_version;     /*PG_CONTROL_VERSION */

    uint32    catalog_version_no;     /* seecatversion.h */

 

    /*系统状态数据*/

    DBState      state;       /* see enum above */

    pg_time_t time;        /* time stamp of last pg_control update */

    XLogRecPtrcheckPoint;      /* last check point record ptr*/

    XLogRecPtrprevCheckPoint;/* previous check point recordptr */

 

    CheckPointcheckPointCopy;/* copy of last check point record */

 

    /*

这两个值确定数据库启动前我们必须恢复到的最小点:

    我们在归档恢复期间刷出数据的时候

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值