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 record
ptr */ CheckPointcheckPointCopy;/* copy of last check point record */ /*这两个值确定数据库启动前我们必须恢复到的最小点: 我们在归档恢复期间刷出数据的时候minRecoveryPoint被更新到最后重放的LSN。这保证了归档恢复,退出并且在更早的停止位置启动并恢复到这个位置。如果我们已经从内存里把新的WAL记录X刷出到磁盘,没有到达X我们决不能启动。没有做归档恢复时minRecoveryPoint是0 backupStartPoint:如果我们正在从在线备份恢复而且还没有到达备份的结尾,backupStartPoint是备份开始检查点的redo指针。到达备份结尾后置backupStartPoint为0并且到达它之前我们不能启动数据库。负责一个布尔值就足够了,但是当我们看到一个end-of-backup记录时我们用这个redo指针做检查,以保证这个end-of-backup记录是我们正在基于其恢复的那个基础备份。 */ XLogRecPtrminRecoveryPoint; XLogRecPtrbackupStartPoint; /*确定WAL能被用于归档或双机热备的参数设置 */
int wal_level;
int MaxConnections;
int max_prepared_xacts;
int max_locks_per_xact; /*这些数据用来检查数据库和backend进程在其上执行的硬件架构计算能力。我们不需要显式检查字节顺序(endianness),因为对于一个不同字节顺序的机器控制文件版本会看到问题,但我们需要担心字节对齐和浮点格式。(注意:磁盘存储布局通常依赖于SHORTALIGN和INTALIGN,但实际上在所有感兴趣的架构上它们是相同的。) 对于浮点兼容仅测试一个double值不是个刀枪不入的测试,但会满足大多数场合。 */ uint32 maxAlign; /* alignment requirement for tuples */
double floatFormat; /* constant1234567.0 */
#define FLOATFORMAT_VALUE 1234567.0 /*这些数据用来确保数据库的配置兼容backend进程执行 */ uint32 blcksz; /* data block size for this DB */ uint32 relseg_size; /* blocks per segment of large relation */ uint32 xlog_blcksz; /* block size within WAL files */ uint32 xlog_seg_size; /* size of each WAL segment */ uint32 nameDataLen; /* catalog name field width */ uint32 indexMaxKeys;/* max number of columns in an index */ uint32 toast_max_chunk_size; /* chunksize in TOAST tables */ /*指明内部timestamp、interval、time内部格式的标志 */ bool enableIntTimes;/* int64 storage enabled? */ /*指明不同类型pass-by-value状态的标志 */ bool float4ByVal; /* float4 pass-by-value? */ bool float8ByVal; /* float8, int8, etc pass-by-value? */ /* CRC of all above ... MUST BE LAST! */ pg_crc32 crc;} ControlFileData; 其中的成员state、checkPointCopy、checkPoint、prevCheckPoint、minRecoveryPoint、backupStartPoint需要说明
工作中Linux上装数据库经常用到的命令PostgreSQL的存储系统二:REDOLOG文件存储结构相关资讯 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)