买域名的网站,微信官方登录入口,腾讯小程序开发工具,杭州做公司网站哪家好最近遇到有人问起PG中控制文件的一些使用问题,总结了一下。
1、PG控制文件简介
1.1、存储的位置
它的路径位于:
相关信息,可以用命令pg_controldata得到:
[10:41:27-postgres@centos2:/var/lib/pgsql/14/data/global]$ pg_controldata -D $PGDATA
pg_control version …最近遇到有人问起PG中控制文件的一些使用问题,总结了一下。
1、PG控制文件简介
1.1、存储的位置
它的路径位于:
相关信息,可以用命令pg_controldata得到:
[10:41:27-postgres@centos2:/var/lib/pgsql/14/data/global]$pg_controldata-D$PGDATA
pg_controlversionnumber:1300
Catalogversionnumber:202107181
Databasesystemidentifier:7138432685960386315
Databaseclusterstate:inproduction
pg_controllastmodified:Sun11Dec202211:19:22AMCST
Latestcheckpointlocation:1/2A000180
Latestcheckpoint'sREDOlocation:1/2A000148
Latestcheckpoint'sREDOWALfile:00000001000000010000002A
Latestcheckpoint'sTimeLineID:1
Latestcheckpoint'sPrevTimeLineID:1
Latestcheckpoint'sfull_page_writes:on
Latestcheckpoint'sNextXID:0:1461
Latestcheckpoint'sNextOID:31466
Latestcheckpoint'sNextMultiXactId:1
Latestcheckpoint'sNextMultiOffset:0
Latestcheckpoint'soldestXID:727
Latestcheckpoint'soldestXID'sDB:1
Latestcheckpoint'soldestActiveXID:1461
Latestcheckpoint'soldestMultiXid:1
Latestcheckpoint'soldestMulti'sDB:1
Latestcheckpoint'soldestCommitTsXid:0
Latestcheckpoint'snewestCommitTsXid:0
Timeoflatestcheckpoint:Sun11Dec202211:19:22AMCST
FakeLSNcounterforunloggedrels:0/3E8
Minimumrecoveryendinglocation:0/0
Minrecoveryendingloc'stimeline:0
Backupstartlocation:0/0
Backupendlocation:0/0
End-of-backuprecordrequired:no
wal_levelsetting:replica
wal_log_hintssetting:off
max_connectionssetting:100
max_worker_processessetting:8
max_wal_senderssetting:10
max_prepared_xactssetting:0
max_locks_per_xactsetting:64
track_commit_timestampsetting:off
Maximumdataalignment:8
Databaseblocksize:8192
Blockspersegmentoflargerelation:131072
WALblocksize:8192
BytesperWALsegment:16777216
Maximumlengthofidentifiers:64
Maximumcolumnsinanindex:32
MaximumsizeofaTOASTchunk:1996
Sizeofalarge-objectchunk:2048
Date/timetypestorage:64-bitintegers
Float8argumentpassing:byvalue
Datapagechecksumversion:0
Mockauthenticationnonce:aaa8abf569631ec60ba05e3f625495da70007738b831e46e1cfda0d26c3709871.2、什么是控制文件
控制文件里存储了数据库唯一系统标识符、系统状态数据、数据库启动前系统必须恢复到的检查点信息、数据库的配置兼容backend进程执行的参数、指明类型timestamp、interval、time内部格式的标志、指明不同类型传值(pass-by-value)状态的标志以及一些数据库的重要信息。
我们可以通过pg_controldata命令直接读取PostgreSQL控制文件内容。
控制文件内容主要分为是三部分,初始化静态信息、WAL及检查点的动态信息、一些数据库配置信息。
控制文件物理路径PGDATA/global/pgcontrol相关信息,可以用命令pgcontroldata得到:¨G0G¨K27K控制文件里存储了数据库唯一系统标识符、系统状态数据、∗∗数据库启动前系统必须恢复到的检查点信息∗∗、数据库的配置兼容backend进程执行的参数、∗∗指明类型timestamp、interval、time内部格式的标志∗∗、指明不同类型传值(pass−by−value)状态的标志以及一些数据库的重要信息。我们可以通过pgcontroldata命令直接读取PostgreSQL控制文件内容。控制文件内容主要分为是三部分,初始化静态信息、WAL及检查点的动态信息、一些数据库配置信息。控制文件物理路径PGDATA/global/pg_control,源码路径src/include/catalog/pg_control.h。
2、控制文件解析
通过pg_controldata命令查看控制文件内容,我们按照初始化静态信息、WAL及检查点的动态信息、一些数据库配置信息三部分进行解析。
2.1、初始静态信息解析
[10:41:27-postgres@centos2:/var/lib/pgsql/14/data/global]$pg_controldata-D$PGDATA
pg_controlversionnumber:1300
Catalogversionnumber:202107181
Databasesystemidentifier:7138432685960386315
Databaseclusterstate:inproductionpg_control last modified: Sun 11 Dec 2022 11:19:22 AM CST 外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
我们找一下pg_control.h中的信息:(pg14的codeline)
sourcepath:
C:\tools\pgsql\14.4\include\server\catalog\pg_control.h
C:\SAPDevelop\3rdpart\postgres\postgres\src\include\catalog\pg_control.h/*Versionidentifierforthispg_controlformat*/
#definePG_CONTROL_VERSION1300pg_control version number: 1300 是控制文件版本号。
sourcepath:
C:\SAPDevelop\3rdpart\postgres\postgres\src\include\catalog\catversion.h#ifndefCATVERSION_H
#defineCATVERSION_H/*
*Wecoulduseanythingwewantedforversionnumbers,butIrecommend
*followingthe"YYYYMMDDN"styleoftenusedforDNSzoneserialnumbers.
*YYYYMMDDarethedateofthechange,andNisthenumberofthechange
*onthatday.(Hopefullywe'llnevercommittenindependentsetsof
*catalogchangesonthesameday...)
*//*yyyymmddN*/
#defineCATALOG_VERSION_NO202107181Catalog version number: 202107181。是系统表版本号,格式是yyyymmddN。记录系统不兼容性的改变。N是yyymmdd当天改变的次数。具体可以查看源码文件src/include/catalog/catversion.h。
Database system identifier: 7138432685960386315 数据库系统号,这个标识串是一个64bit的整数,其中包含了创建数据库的时间戳和initdb时初始化的进程号,具体初始化方法可查看源码文件src/backend/access/transam/xlog.c。创建时间可以通过to_timestamp转换查看到(这个时间就是数据库安装的时间)。
Database cluster state: in production 记录实例的状态。源码文件中看到数据库的几种状态,源码在pg_control.h中:
/*
*Systemstatusindicator.Notethisisstoredinpg_control;ifyouchange
*it,youmustbumpPG_CONTROL_VERSION
*/
typedefenumDBState
{
DB_STARTUP=0,
DB_SHUTDOWNED,
DB_SHUTDOWNED_IN_RECOVERY,
DB_SHUTDOWNING,
DB_IN_CRASH_RECOVERY,
DB_IN_ARCHIVE_RECOVERY,
DB_IN_PRODUCTION
}DBState;含义如下:
starting up:表示数据库正在启动状态。shut down:数据库实例(非Standby)正常关闭后控制文件中就是此状态。shut down in recovery:Standby实例正常关闭后控制文件中就是此状态。shutting down:正常停库时,先做checkpoint,开始做checkpoint时,会把状态设置为此状态,做完后把状态设置为shut down。in crash recovery:数据库实例非异常停止后,重新启动后,会先