PG体系结构(三)
四、物理结构
4.1 软件安装目录
bin //二进制可执行文件 include //头文件目录 lib //动态库文件 share //文档以及配置模版文件
4.2 数据目录
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 关于表空间
在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)