简介
postgresql是是一个多进程架构的C/S模式关系型数据库,PG数据的进程大致可以分为如下几类:
- postgresql server process: 所有进程的父进程
- backend process: 每个客户端对应一个backend process,一个backend process只能连接到一个datbase
- backgroud process: 后台运行的进程,比如脏数据刷盘的write process/自动删除的autovacuum process/做检查点的check point进程...
- replication process: 处理流复制的进程
- backgroud worker process(user-define): 运行用户自定义的一些进程
postgresql server process
当PG启动时, 会启动postgresql server process, 然后他会启动一个shared memory, 同时启动background process,replication process(如果有)和background worker process, 等待客户端的连接
backend process
通过tcp协议和客户端进行连接,一个backend只能连接一个database,PG允许多个客户端同时连接到数据库,默认是100个,通过max_connection参数控制。PG没有连接池,可以通过pgpool等插件进行优化
backgroud process
-
Postmaster (主进程) :
- 启动和管理所有其他后台进程。
- 负责接收客户端连接请求并分配子进程来处理这些请求。
-
WAL Writer:
- 负责将事务日志(WAL,Write-Ahead Logging)从内存写入磁盘。
- 确保数据的持久性和一致性。
-
Checkpointer:
- 定期将内存中的数据页刷新到磁盘,以减少系统崩溃时的数据丢失。
- 负责创建检查点,确保数据库在恢复时能快速启动。
-
Background Writer:
- 负责将脏页(修改过但尚未写入磁盘的页)写回磁盘。
- 通过预写数据来减少检查点的负担,提高系统性能。
-
Autovacuum Daemon:
- 自动执行清理和维护任务,如清理死元组(dead tuples)和更新统计信息。
- 有助于保持数据库性能和防止膨胀。
-
Stats Collector:
- 收集数据库的运行统计信息(如连接数、查询性能等)。
- 提供用于监控和优化数据库性能的数据。
-
Logical Replication Launcher:
- 管理逻辑复制进程,支持数据的逻辑复制和订阅。
- 允许在不同数据库之间同步数据。
-
Worker Processes:
- 用于执行并行查询和其他后台任务。
- 提高查询性能和数据库的并发处理能力。