PHP实战中知识总结 / PgSQL - pg_controldata(bin目录文件)

一、pg_controldata

pg_controldata用于显示一个PostgreSQL数据库集簇的控制信息。可以打印在initdb期间初始化的信息,例如目录版本。它也显示关于预写式日志和检查点处理的信息。这种信息是集簇范围的,并且不针对任何一个数据库。

这个工具只能由初始化集簇的用户运行,因为它要求对数据目录的读访问。你可以在命令行中指定数据目录,或者使用环境变量PGDATA。如果没有指定数据目录(DATADIR), 将使用环境变量PGDATA。

二、命令格式

pg_controldata [OPTION] [DATADIR]

1、option

参数说明
[-D, --pgdata=]DATADIR指定数据目录,或者使用环境变量PGDATA
-V, --version打印pg_controldata版本并退出
-?, --help显示命令行参数的帮助信息并退出

[postgres@izwz91quxhnlkan8kjak5hz bin]$ pg_controldata
pg_control version number:      1300                // pg_control版本
Catalog version number:        202007201              // 系统表的版本号
Database system identifier:      6939478009092009017         // 数据库系统标识,这个标识串是一个64bit的整数,其中包含了创建数据库时的时间戳及initdb时初使化的进程号
Database cluster state:        in production            // 数据库簇状态,实例的状态是用一个枚举类型来表示的,具体见pg\_control.h
pg_control last modified:       2021年05月23日 星期日 22时03分09秒 // pg_control 最后修改
Latest checkpoint location:      0/5FC75268             // 最新检查点位置
Latest checkpoint's REDO location:  0/5FC75230             // 最新检查点的 REDO 位置
Latest checkpoint's REDO WAL file:  00000001000000000000005F      // 最新检查点的重做WAL文件
Latest checkpoint's TimeLineID:    1                  // 最新检查点的 TimeLineID
Latest checkpoint's PrevTimeLineID:  1                  // 最新检查点的PrevTimeLineID
Latest checkpoint's full_page_writes: on                 // 最新检查点的full\_page\_writes
Latest checkpoint's NextXID:     0:4621               // 最新检查点的NextXID
Latest checkpoint's NextOID:     24757                // 最新检查点的 NextOID
Latest checkpoint's NextMultiXactId: 1                  // 最新检查点的 NextMultiXactId
Latest checkpoint's NextMultiOffset: 0                  // 最新检查点的 NextMultiOffset
Latest checkpoint's oldestXID:    478                 // 最新检查点的 oldestXID
Latest checkpoint's oldestXID's DB:  1                  // 最新检查点的oldestXID所在的数据库
Latest checkpoint's oldestActiveXID: 4621                // 最新检查点的 oldestActiveXID
Latest checkpoint's oldestMultiXid:  1                  // 最新检查点的 oldestMultiXid
Latest checkpoint's oldestMulti's DB: 1                  // 最新检查点的oldestMulti所在的数据库
Latest checkpoint's oldestCommitTsXid:0                  // 最新检查点的 oldestCommitTsXid
Latest checkpoint's newestCommitTsXid:0                  // 最新检查点的 newestCommitTsXid
Time of latest checkpoint:      2021年05月23日 星期日22时03分09秒  // 最新检查点的时间
Fake LSN counter for unlogged rels:  0/3E8                // 未标记REL的伪LSN计数器
Minimum recovery ending location:   0/0                 // 最小恢复结束位置
Min recovery ending loc's timeline:  0                  // 最小恢复结束位置时间表
Backup start location:        0/0                 // 开始进行备份的点位置
Backup end location:         0/0                 // 备份的最终位置
End-of-backup record required:    no                 // 需要备份结束记录
wal_level setting:          replica               // wal_level设置
wal_log_hints setting:        off                 // wal_log_hints设置
max_connections setting:       100                 // 最大连接数设置
max_worker_processes setting:     8                  // 设置系统能够支持的后台进程的最大数量。这个参数只能在服务器启动时设置。 默认值为 8。
max_wal_senders setting:       10                 // 同时运行 WAL 发送进程 的最大数
max_prepared_xacts setting:      0
max_locks_per_xact setting:      64
track_commit_timestamp setting:    off                 // 记录事务的提交时间。这个参数只能在postgresql.conf文件中或在服务器命令行上设置。默认值是off
Maximum data alignment:        8                  // 最大数据校准
Database block size:         8192                // 数据库块大小
Blocks per segment of large relation: 131072               // 每段大关系的块
WAL block size:            8192                // WAL的块大小
Bytes per WAL segment:        16777216              // 每一个 WAL 段字节数
Maximum length of identifiers:    64                 // 标识符的最大长度
Maximum columns in an index:     32                 // 在索引中可允许使用最大的列数
Maximum size of a TOAST chunk:    1996                // TOAST区块的最大长度
Size of a large-object chunk:     2048                // 大对象区块的大小
Date/time type storage:        64-bit integers           // 日期/时间 类型存储
Float8 argument passing:       by value              // 正在传递Flloat8类型的参数
Data page checksum version:      0                  // 数据页校验和版本
Mock authentication nonce:      c6310f6e38fc3558c95fa1913be554a864fc22152adfc44d9471dd9d7ef6128e // 当前身份验证

2、Database cluster state

(1)starting up:表示数据库正在启动的状态,实际上目前没有使用此状态。

(2)shut down:数据库实例(非Standby)正常关闭后控制文件中就是此状态。

(3)shut down in recovery:Standby实例正常关闭后控制文件中就是此状态。

(4)shutting down:当正常停库时,会先做checkpoint,在开始做checkpoint时,会把状态设置为此状态,当做完后会把状态置为shut down。

(5)in crash recovery: 当数据库实例非异常停止后,重新启动后,会先进行实例的恢复,在实例恢复时的状态就是此状态。

(6)in archive recovery:Standby实例正常启动后,就是此状态。

(7)in production:数据库实例正常启动的后就是此状态。Standby数据库正常启动后不是此状态,而是“in archive recovery

2、wal_level解析

wal_level 决定多少信息写入到 WAL 中。默认值是replica。这个参数只能在服务器启动时设置。最小的wal_level不会包括足够的信息来从基础备份和 WAL 日志中重建数据,因此,要启用 WAL 归档(archive_mode)和流复制,必须使用replica或更高级别

(1)minimal:只写入从崩溃或立即关机中恢复的所需信息。在minimal级别中,对于创建或重写永久关系的事务的其余部分,不会记录任何信息。 这可以提升命令执行速度。

(2)replica:增加 wal 归档信息同时包括只读服务器需要的信息。(9.6 中新增,将之前版本的 archive 和 hot_standby合并)

(3)archive:是增加wal归档所需的日志(9.6之前的版本)。

(4)hot_standby:是在备用服务器上增加了运行只读查询所需的信息,一般实在流复制的时候使用到(9.6之前的版本)。

(5)logical:会增加支持逻辑解码所需的信息。在logical层,与replica相同的信息会被记录,外加上 允许从 WAL 抽取逻辑修改集所需的信息。使用级别logical将增加 WAL 容量,特别是如果为了REPLICA IDENTITY FULL配置了很多表并且执行了很多UPDATE和DELETE语句时。

3、wal_log_hints

设置wal_log_hints这个参数使得能够记录特定提示位(hint-bit)的变化。这个参数只能在服务器启动的时候被设置

当这个参数设置为ON时,PostgreSQL数据库服务器在一个检查点之后第一次页面更改过程(即使是对提示位进行非关键性的修改)中,将每个磁盘页的全部内容写入到WAL中。即全页写(full page writes)

4、max_wal_senders

指定来自后备服务器或流式基础备份客户端的并发连接的最大数量(即同时运行 WAL 发送进程 的最大数)。默认值是10,0值意味着禁用复制。WAL 发送进程被计算在连接总数内,因此该参数 不能被设置为高于max_connections的值。这个参数只能在服务器启动时被设置。wal_level必须设置为archive或更高级别以允许来自后备服 务器的连接。

PHP实战中知识总结