PG体系结构(三)

太阳2年前技术文章484

四、物理结构

4.1 软件安装目录

bin             //二进制可执行文件
include         //头文件目录
lib             //动态库文件
share           //文档以及配置模版文件

4.2 数据目录


image.png


4.2.1 参数文件

pg_hba.conf               //认证配置文件
pg_ident.conf             //认证方式用户映射文件
postgresql.auto.conf      //alter system动态修改配置文件
postgresql.conf           //主配置文件
postmaster.opts
postmaster.pid            //pid

1、pg_hba.conf

pg_hba.conf文件为pg的认证配置文件,无论是我们用户登录还是主从复制,都需要在该文件下填写相关的认证配置,保证可正常联通数据库。

pg_hba.conf主要由5个参数组成:Type(主机类型)、Database(数据库名)、User(用户名)、Address(IP地址和掩码)、 Method(加密方法)

  • Type : 指定允许的连接方式

"local"表示使用 Unix-domain socket 进行连接;

"host" 表示可以使用 ssl或者非ssl加密的 TCP/IP socket 进行连接;

"hostssl" 表示必须通过ssl加密的 TCP/IP socket 进行连接;

"hostnossl" 表示通过使用非ssl的 TCP/IP socket 进行连接。

  • Database : 指定允许访问数据库信息

可以为 "all", "sameuser", "samerole", "replication",或者业务数据库名称。"all"并不包括"replication",若需要方通replication需要单独编写放通规则;

多个数据库使用逗号分隔

  • User : 指定允许用户

表示认证配置的数据库用户信息,可以为"all"也可以指定某个数据库用户,多个用户授权可使用逗号分隔;

可引用外部文件中配置信息信息认证配置,@${filename}

  • Address : 指定允许主机IP信息

表示认证配置的主机IP信息,可以是一个主机名,也可以是IP+掩码;0.0.0.0/0表示所有主机

  • Method : 指定认证策略

表示认证策略,可以设置为"trust", "reject", "md5", "password", "scram-sha-256", "gss", "sspi", "ident", "peer", "pam", "ldap", "radius" or "cert";

password表示以明文方式发送密码;

2、postgres.conf

  • 配置参数类别

参数类型

修改该类参数代价

internal

内部参数,只读无法修改。postgres程序写死或者是在初始化指定后无法修改的参数

postmaster

修改该类参数需要重启数据库

sighup

不需要重启数据库,重新加载配置文件即可对所有的进程生效

backup

不需要重启数据库,重新加载配置文件后,新的链接可以应用修改后的参数,已存在链接不生效

superuser

必须通过超级用户进行修改

user

普通用户可进行修改

PG数据库所有的参数都在pg_settings表中,具体参数对应什么类别可通过该表进行查询。

  • 连接相关参数

参数

含义

listen_addresses

server端对客户端的Tcp/ip监听地址,默认为"localhost"表示仅允许本地通过嵌套字连接,"*"表示监听所有IP

port

服务器监听TCP端口,默认5432

max_connections

server端允许最大连接数,默认100

superuser_reserved_connections

Server端为超级账号保留的连接数,默认3

unix_socket_directory

Server监听客户端Unix嵌套字目录,默认/tmp

  • 内存相关参数

参数

含义

shared_buffer

共享内存缓存区大小,默认128MB

temp_buffers

每个会话使用的临时缓存区大小,默认8MB

work_mem

内存临时表排序操作或者hash需要使用到的内存缓存大小,默认4MB

maintenance_work_mem

对于维护性操作(vacuum、create index)最大使用内存,默认64M,最小1M。

max_stack_depth

Server端执行堆栈最大安全深度,默认2M,若发现无法执行复杂函数时可适当调整该参数

  • wal相关参数

参数

含义

wal_level

minimal, replica, or logical

fsync

是否使用fsync()将内存中的脏页刷新到物理磁盘,默认为ON

synchronous_commit

事务提交是否需要等待对应的wal日志刷盘,默认为ON

wal_sync_method

wal日志刷盘方式

full_page_write

在checkpoint之后将第一次发生修改的页面写入到wal日志中,保证数据库奔溃恢复可以wal日志中该保存页面以及wal日志

wal_buffer

wal缓存的大小,默认为-1

  • 错误日志相关参数

参数

含义

logging_collector

是否打开日志

log_rotation_age

超过多少天生产一个新的日志文件

log_rotation_size

超过多少大小生成一个新的日志文件

log_destination

日志目录

log_filename

日志文件名

log_truncate_on_rotation

当日志名已存在时,是否覆盖原文件

4.2.2 日志文件

pg_xact                             //事务提交日志,记录事务提交状态的子目录
postgresql-2020-09-10_154100.log    //运行日志,打印一些error信息
pg_wal                              //重做日志,wal预写日志文件的子目录

4.2.3 其他一些目录文件

## $PGDATA下
base                      //默认表空间目录
global                    //共享系统表目录
pg_commit_ts              //记录事务提交时间的子目录
pg_dynshmem               //记录使用共享内存文件的子目录
pg_logical                //包含用于逻辑复制的状态数据的子目录
pg_multixact              //包含多事务(multi-transaction)状态数据的子目录(用于共享的行锁)
pg_notify                 //包含LISTEN/NOTIFY状态数据的子目录
pg_replslot               //包含复制槽数据的子目录
pg_serial                 //包含已提交的可序列化事务信息的子目录
pg_snapshots              //包含导出的快照的子目录
pg_stat                   //包含用于统计子系统的永久文件的子目
pg_stat_tmp               //包含用于统计信息子系统的临时文件的子目录
pg_subtrans               //记录事务状态数据的子目录
pg_tblspc                 //指向表空间的符号连接
pg_twophase               //记录分布式事务状态的子目录
PG_VERSION                //记录PG版本
## 单独的表空间目录下
tbs01                     //表空间目录

4.2.4 关于表空间

image.png

    在PG数据库中,对于默认使用pg_default表空间的所有数据,都默认存储在$PGDATA下base目录下,对于独立划分出来的表空间,除表空间指定的location外,还需要在$PGDATA下的pg_tblspc进行记录,并利用软连接连接至对应的表空间目录。

    所有数据库对象都有各自的oid(object identifiers),oid是一个无符号的四字节整数,相关对象的oid都存放在相关的system catalog表中,比如数据库的oid和表的oid分别存放在pg_database,pg_class表中。


## 表空间目录 
/data/pgsql12/tbs01/PG_12_201909212/17096
PG_12 表示数据库版本
201909212 表示 Catalog 版本
16391 表示 该表空间下数据库的oid

## 查看数据库Catalog信息
$ pg_controldata
pg_control version number:            1201
Catalog version number:               201909212
Database system identifier:           6870373621203487994
Database cluster state:               in production
pg_control last modified:             Thu 10 Sep 2020 09:28:48 PM CST

## 查看数据库oid
postgres=# select oid,datname from pg_database;
  oid  |  datname
-------+-----------
 13547 | postgres
 16384 | db1
     1 | template1
 13546 | template0
 17096 | db2                //可以看到表空间tbs01其实是被db2使用的
(5 rows)


标签: PostgreSQL

相关文章

PG的锁(二)

四、死锁PostgreSQL自动检测死锁情况并会自动回滚其中一个事务进行处理,从而其他事务完成。db1=# select * from t1 where id in (1,2,3);  id | i...

PG的统计信息(三)

1.3 数据分布类统计信息1.3.1 pg_stats通过对pg_stats的查询,可以查看每个字段的数据分析统计信息,类似SQL Server的直方图,为优化器选择最佳执行计划提供依据,pg_sta...

PG的执行计划

一、Explain基本使用1.1 命令解释explain [ ( option [,...] ) ] statement explain [ analyze ] [ verbose ] statem...

pg_restore

逻辑备份恢复PG提供了pg_restore的命令可以为通过pg_dump转储的数据进行逻辑恢复。对于SQL脚本可通过psql进行恢复语法pg_restore [connection_option] [...

PG参数整理

一、参数的分类参数的类型名称说明internal内部参数,只读无法修改。postgres程序写死或者是在初始化指定后无法修改的参数postmaster更改该类参数,需重启生效sighup不需重启,重新...

REPMGR-PG高可用搭建(二)

REPMGR-PG高可用搭建(二)

REPMGR搭建步骤一、介绍repmgr是第二象限开源的一套流复制集群管理工具,用于管理PostgreSQL服务器群集中的复制和故障转移。 支持故障自动转移和手动切换;支持分布式管理集群节点,易扩展,...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。