pg编程(一文看懂PG进程体系结构)
pg编程(一文看懂PG进程体系结构)平时多在休眠,被激活时工作使用LRU算法进行清理脏页由postmaster fork出的子进程1、Backgroup writer将shared buffer中的脏数据页写到磁盘
概述对PG的进程做个总结,适合刚入门的朋友,学一门新的数据库一定要掌握其中每个进程的含义,可能不会用得上,但是对于学习一定很有帮助的。


1、postmaster
所有数据库进程的主进程,守护进程,实际上第一个postgres进程
- 数据库的启停
 - 监听客户端连接
 - 为每个客户端里连接fork专用的postgres进程
 - postgres进程出错时尝试修复
 - 管理数据文件
 - 管理数据库的辅助进程
 
2、postgres
由postmaster fork出的子进程
- 直接与客户端进程通讯
 - 负责接收客户端的所有请求
 - 包含数据库引擎,负责解析sql和生成执行计划
 - 根据命令调用各种辅助进程和访问各内存结构
 - 负责返回命令执行结果给客户端
 - 在客户端断开连接时释放进程
 
二、辅助进程

1、Backgroup writer
将shared buffer中的脏数据页写到磁盘
使用LRU算法进行清理脏页
平时多在休眠,被激活时工作
2、Autovacuum launcher/workers
负责回收垃圾数据进程
当参数autovacuum设为on的时候启用自动清理功能
Launcher为清理的守护进程,每次启动的时候会调用一个或多个worker
Worker是负责真正清理工作的进程,由autovacuum_max_workers参数设定其数量
3、WAL writer
将redo日志写入磁盘文件
触发时机:
- WAL BUFFER满了
 - 事务commit时
 - WAL writer进程到达间歇时间时;
 - checkpoint发生时
 
4、Checkpoint
- 用于保证数据库的一致性
 - 它会触发bgwriter和wal writer动作
 - 拥有多个参数控制其启动的间隔
 
5、Syslogger
记录系统日志
- logging_collector参数为on时启动,不建议关闭
 - log_directory设定日志目录
 - log_destination设定日志输出方式,甚至格式
 - log_filename设定日志文件名
 - log_truncate_on_rotation设定是否重复循环使用且删除日志
 - log_rotation_age设定循环时间
 - log_rotation_size设定循环的日志尺寸上线
 
6、Archiver:
用于将写满的WAL日志文件转移到归档目录,该进程只有在归档模式才会启用
7、Statistics Collector:
统计信息的收集进程。
收集表和索引的空间信息和元组信息等,甚至是表的访问信息。收集到的信息除了能被优化器使用以外,还有autovaccum也能利用,甚至给数据库管理员作为数据库管理的参考信息
三、其他
startup -- 主要用于数据库恢复的进程
bgworker -- 分为很多种worker,例如logical replication worker launcher. parallel worker. replication worker等
wal sender -- 逻辑复制、流式物理复制的WAL发送进程
wal receiver -- 逻辑复制、流式物理复制的WAL接收进程
work process -- 工作进程,动态fork,例如并行计算的进程。
后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注一下~





