暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

postgresql体系结构及配置参数简要说明

在路上 2025-01-15
194

1.进程

master postgres 主进程:提供监听、连接协议、验证功能、fork子进程,提供socket和tcp方式连接

session processors(sp) 会话进程:和client连接,用户一旦验证成功就会fork一个新的进程local,work_mem(PGA)给会话进程使用

bp backupground processors 后台进程:


bgwriter进程:后台刷新脏页
syslogger:主要负责数据库状态信息日志记录
ckpt:检查点进程
walwriter:redo日志写进程
arch:归档进程
stats:统计收集进程
autovaccum进程:数据整理


2.内存

data buffer:数据缓冲区shared_buffers 默认128m 一般设置为系统内存的25%-40%

wal buffer:日志缓冲区 2g左右

pga:私有缓冲区work_mem sp会话进程使用 512M

3.存储结构(宏观)

control file:控制文件,记录数据库状态
tablespace:表空间
file segment:1个段1个g
online WAL log:redor日志,pg_wal目录下
arch WAL log:归档日志
log file:状态日志、错误日志等

4.重点文件

$PGDATA/log 运行日志

$PGDATA/pg_wal 重做日志,10之前为pg_xlog

$PGDATA/pg_xact事务提交日志

1)运行日志参数

logging_collector = on #配置csvlog需要打开日志收集
log_destination='csvlog' 指定输出目的地,可以配置输出到标准错误stderr、csv日志文件、syslog系统日志
log_statement='all' 控制哪些sql语句记录到日志中,none、ddl、mod、all 
log_directory = 'log' 日志文件存放目录,默认$PG_DATA/log
log_filename='postgresql-%Y-%m-%d_%H%M%S.log'日志名称,默认是postgresql-%Y-%m-%d_H%M%S%.log
log_connections=on 用户session登录时是否写日志,默认off
log_disconnections=on 用户session退出时是否写入日志,默认off
log_truncate_on_rotation=on 设置重用日志
log_rotation_age=1d 保留单个文件的最大时长,默认是1d,也有1h、1m、1s
log_rotation_size=10M 保留单个文件的最大尺寸,默认10mb
log_checkpoints=on 记录checkpoint操作
log_duration=on 记录sql执行时间
log_lock_waits=on记录长时间阻塞
log_min_duration_statement=60 慢sql记录
log_min_messages=warning 日志级别

2)postgresql.conf

listen_addresses='*' 监听客户端的地址
port=5432 端口
max_connections=2000 最大连接数 默认100
unix_socket_directories  socket文件位置,默认在/tmp下
shared_buffers=1g 数据缓冲区,建议1/4内存
maintenance_work_mem 维护工作内存,用于vacuum,create index等 1/4-1/2内存
max_worker_process 总worker数
max_parallel_workers_per_gather 单条query中,每个node最多允许开启的并行计算worker数
wal_level wal级别 默认replica级别
wal_buffers 类似oracle的log buffer
checkpoint_timeout checkpoint时间间隔
max_wal_size 控制wal的数量
min_wal_size 控制wal的数量
archive_command 开归档
autovacuum 开启自动vacuum

3)控制文件

pg_controldata $PGDATA

pg_control version number  版本号
database system identifier dbid
database cluster state 集群状态 primary或standby
pg_control last modified 最后修改时间
latest checkpoint redo location #redo位置
latest checkpoint redo wal file #wal文件号
latest checkpoint nextxid 下一个事务id
latest checkpoint nextoid 下一个oid
wal_level setting replica #wal级别
max_connections setting 100 #最大连接数
database block size 8192 #数据块大小
WAL block size 8192 #wal数据块大小
bytes per wal segment 16777216 #单个wal大小16M

4)数据文件

pg中,每个索引和表都是一个单独的文件,pg中叫做page。默认大于1G的page被分割

select relfilenode from pg_class where relname='t1'; 查询表的oid
select pg_relation_filepath('t1');具体位置  表空间--数据库--表
show data_directory; 查看数据目录在磁盘哪个路径下

5)wal日志(redo)

目的:保证数据库崩溃后的安全,可以重放从最后一次检查点以来的日志项来恢复数据库的一致性。

#大小设置
max_wal_size =1GB 
min_wal_size =80MB 
#命名格式:16进制的24个字符组成,8个字符为一组
00000001-00000000 00000001 时间线-逻辑id-物理id
#查询当前scn号在哪个wal日志下
select pg_walfile_name(pg_current_wal_lsn());
#查询目录中的日志文件
select * from pg_ls_waldir() order by modificaton asc;
#切换wal日志
select pg_switch_wal();
#查看wal具体内容
pg_waldump

6)ARCH WAL log

就是把pg_Wal中的日志备份出来,当系统故障后可以通过归档的日志文件对数据进行恢复

#配置归档需开启如下参数
wal_level=replica   #有minimal、replica和logical,minimal级别无法开启日志归档
archive_mode=on #打开归档
archive_command='test ! -f /archive/%f && cp %p /archive/%f'#%p将要归档的wal文件包含完整路径的信息文件名
 %f不包含路径信息的wal文件的文件名
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论