一、简单介绍¶
控制文件记录了数据库的重要信息,如数据库的系
统标识符“system_identifier”、系统表版本“Catalog versionnumber”、实例状态、Checkpoint信息、数据页 的块大小、WAL日志的页大小及文件大小、一些实例备份和恢复信息等
在PostgreSQL中提供了pg_controldata命令显示控制文件中的内容
pg_controldata --pgdata=/home/postgresql/data/
介绍一下重要的控制文件信息
1.1 数据库的唯一标识串解密¶
数据库的唯一标识串“Database system identifier”用于唯一标识一套数据库系统 重点:
物理复制的主数据库和备数据库有相同的数据
库唯一标识串
唯一标识串是在Initdb初始化数据库实例时生成的,它是一个64bit的整数。该整数由当前的时间戳和执行 Initdb进程的PID的两个部分组成
知道了PostgreSQL数据库的唯一标识串,就能知道该数据库是什么时候创建的
例如:
SELECT to_timestamp(((6531601841114581486>>32) & (2^32 -1)::bigint));
1.2 Checkpoint信息解密¶
什么是检查点
想象一个问题 假如WAL重做日志可以无限地增大,从不丢失数据的角度来看是不需要把缓冲池中的脏数据块写入磁盘
这个想法存在如下问题:
-
WAL重做日志不可以无限增大,因为WAL日志会占用一定的空间
-
重放WAL日志会占用时间
-
缓冲区不可能无限大,所以不管怎么样,都需要把一定的脏数据刷新到磁盘中,需要考虑必须要先刷新哪 些脏数据等问题
所以检查点的引入就是为了解决这些问题 有了检查点,恢复数据库时,只需要应用某个时间点之后的WAL日志应用就可以
Latest checkpoint location: 0/E003210 很好接受 就是上一次的检查点 Latest checkpoint's REDO location: 0/E0031D8
Latest checkpoint's REDO WAL file: 00000007000000000000000E
Latest checkpoint's REDO location是啥
记住一点:
在数据库实例宕机之后,开始重做WAL
日志时,开始的日志点为“Latest checkpoint's REDO location”,而不是“Latest checkpoint location”