PostgreSQL架构
- PostgreSQL物理架构是由shared memory(共享内存)、background process(后台进程)和data files(数据文件)组成
- shared memory(共享内存)是为了database和transaction log提供cache.最核心的是shared buffer和wal buffers
- shard buffer 是减少磁盘IO而设计的。shard buffer能否加速让大量数据访问、减少大量用户统一时间访问的资源征用
- wal buffer是临时存储数据库的变化,wal buffer的日志数据定期会flush到wal file
PostgreSQL 进程模型
PostgreSQL进程类型
- Postmaster Daemon 进程(postmaster process)
- PostgreSQL Background进程(background process)
- PostgreSQL Backend进程(backend process)
Postmaster Daemon 进程
- Postmaster进程是PostgreSQL启动的第一个进程,它的主要工作是负责执行数据库的recovery、初始化shared memory和启动运行PostgreSQL的后台进程。
PostgreSQL Background进程
- logger :该进程负责把错误日志写入到logfile
- checkpointer :检查点进程负责检查点发生时候,负责dirty buffer写入文件
- background writer :写进程负责周期性的dirty buffer写入到文件
- walwriter :该进程负责把wal buffer数据写入到wal 文件
- autovacuum launcher :该进程负责清理工作,核心是做三方面的事情
- 清理表中的已经删除记录
- 更新表的统计信息以供优化器使用
- autovacuum launcher使用stats collector后台进程收集统计信息来确定autovacuum候选列表。
- archiver : 当日志归档时候,该进程负责把WAL 文件拷贝到指定的目录
- stats collector :statistics collector 负责对数据库,表,函数的调用次数进行统计,通过socket与执行查询的进程进行通信,当执行语句的进程,在执行一条语句时,会在执行前,把上条语句的统计信息通过socket发送给 statistics collector 进程,这样做是因为上个事务已经 commit 或 rollback 了,统计的是事务已完成的数量
PostgreSQL Backend进程
- 应用通过 TCP 和PostgreSQL建立连接,当客户端连接断开时,服务端的连接消失。允许多个客户端同时连接,连接数由 max_connections 参数控制,默认是 100,如果客户端频繁的和服务端建立连接然后断开。
- 该进程负责接受来自应用的请求,同时把请求的响应给客户端