当前位置: 首页 > 科技观察

面试官:谈谈你对PG架构的理解?_0

时间:2023-03-19 00:51:34 科技观察

今天这篇文章主要从日志文件、参数文件、控制文件、数据文件、重做日志(WAL)、后台进程六个方面来介绍PostgreSQL的架构。架构PostgreSQL的主要架构如下:一、日志文件1、日志文件的类型$PGDATA/log操作日志(pg10之前的$PGDATA/pg_log)$PGDATA/pg_wal重做日志(pg10之前的$PGDATA/pg_xlog)$PGDATA/pg_xacttransactioncommitlog($PGDATA/pg_clogbeforepg10)服务器日志,可以在启动时指定,如pg_ctlstart-l./alert.log2。操作日志与操作日志相关的主要参数如下。如果默认不启用,则不会有log目录,打开后会自动生成。3、事务日志pg_xactpg_xact是事务提交日志,记录事务元数据。默认启用。内容一般不能直接阅读。4.服务器日志如果在启动pg_ctl时没有指定-l参数指定服务器日志,可能会向cmd前台输出错误。服务器日志记录了有关数据库的重要信息。lsof可能可以过滤掉正在写入的日志文件$lsof-cpostgres|grepREG|grep-v/usr|grep-v/dev|grep-v/SYS2.参数文件1.postgresql.confpg的主要参数文件有很多详细的说明和注释类似于Oracle的pfile和MySQL的my.cnf。默认情况下它在$PGDATA下。很多参数修改后需要重启。9.6之后支持alter系统修改,修改后的版本会存放在$PGDATA/postgresql.auto.conf中,重新加载或者重启即可生效。主要参数如下:2.pg_hba.conf这个是黑白名单设置。文件中有详细的参数说明,默认参数如下:type有local、host、hostssl、hostnossl四种。local是本地认证数据库可以是all,也可以是指定数据库用户栏可以是all,也可以是具体用户地址可以是ip或者网段方式比较重要,有“trust”,“reject”,“md5”,“password”、“scram-sha-256”、“gss”、“sspi”、“ident”、“peer”、“pam”、“ldap”、“radius”或“cert”是很多选项。信任是免密码登录;reject为黑名单拒绝;md5为加密密码;密码为未加密的密码;ident是Linux下PostgreSQL默认的本地认证方式,任何可以正确登录服务器的操作系统用户(注意:不是数据库用户)都可以使用该用户映射的数据库用户登录数据库,无需密码。3.pg_ident.confpg_ident.con为用户映射配置文件。结合pg_hba.connf,方法是ident,可以用特定的操作系统用户和指定的数据库用户登录数据库。如下:pg_ident.conf如下:pg_hba.conf如下:三、控制文件1、控制文件位置$PGDATA/global/pg_control控制文件在数据库目录的全局目录下。控制文件记录了数据库的重要信息。2.查看控制文件pg_controldata可以查看控制文件的内容$pg_controldata$PGDATApg_controlversionnumber:1100Catalogversionnumber:201809051Databasesystemidentifier:6684270596680436587#dbidDatabaseclusterstate:inproduction#primarypg_controllastmodified:Thu16May201902:26:37PMCSTLatestcheckpointlocation:0/48812A0Latestcheckpoint'sREDOlocation:0/4881268#redo位置Latestcheckpoint'sREDOWALfile:0000000000000000001#walfilenumberLatestcheckpoint'sTimeLineID:1Latestcheckpoint'sPrevTimeLineID:1Latestcheckpoint'sfull_page_writes:onLatestcheckpoint'sNextXID:0:572#NexttransactionidLatestcheckpoint'sNextOID:16388#下一个OID记录了一些数据库.....controlfile信息,比如如数据库id,是否打开,wal位置,checkpoint位置等。controlfile是数据库部署和调优的一个非常重要的文件。四、数据文件1、在pagepg中,每个索引和表都是一个单独的文件,在pg中称为page。默认情况下,每个大于1G的页面都会被分成pg_class.relfilenode.1这样的文件。Page的默认大小为8KB,最大为32KB。一个数据块中可以存储多行数据。区块中的结构如下图所示:区块头记录了以下信息:区块的校验和值空闲空间的起始位置和结束位置特殊数据的起始位置其他信息行指针是一个32位数字,具体结构如下:LinecontentOffset,15bit;指针标记,2bit;行内容长度,15bit。行指针中行内容的偏移量为15bit,最大可表示的偏移量为2^15=32768,所以块的最大大小为32768,即32KB。2、页面的物理位置页面的物理位置为$PGDATA/BASE/DATABASE_OID/PG_CLASS.RELFILENODE需要注意的是pg_class.relfilenode类似于dba_objects.data_object_id,truncatetable后relfilenode会发生变化。相应的物理文件名也会发生变化。五、WAL日志1.wal位置wal在$PGDATA/pg_wal下。10之前是pg_xlog2。wal命名格式文件名由24个十六进制字符组成,每组由8个字符组成。各组含义如下3、手动切换WAL日志的命令在PG10之前:highgo=#selectpg_switch_xlog();pg_switch_xlog----------------0/B000C48(1row)PG10之后:highgo=#selectpg_switch_wal();pg_switch_wal--------------0/B000C48(1row)6.后台进程pg后台进程说明如下: