PostgreSQL体系结构
本地内存
本地内存是服务器进程独占的内存结构,每个postgresql子进程都会分配一小块相应内存空间,随着连接会话的增加而增加,它不属于实例的一部分
work_mem:用于排序的内存
maintenance_work_mem:用于内部运维工作的内存,如VACUUM垃圾回收、创建和重建索引等等
temp_buffers:用于存储临时表的数据
共享内存
Shared Buffer:
-用于缓存表和索引的数据块 -数据的读写都是直接对BUFFER操作的,若所需的块不再缓存中,则需要从磁盘中读取 -在buffer中被修改过的,但又没有写到磁盘文件中的块被称之为脏块 -由shared_buffers参数控制尺寸
WAL(Write Ahead Log) Buffer:
-预写日志缓存用于缓存增删改等写操作产生的事务日志 -由wal_buffers参数控制尺寸
Clog Buffer:
-Commit Log Buffer是记录事务状态的日志缓存
进程
辅助进程
Backgroup writer:
-工作任务是将shared buffer中的脏数据页写到磁盘文件中 -使用LRU算法进行清理脏页 -平时多在休眠,被激活时工作
Autovacuum launcher/workers:
-自动清理垃圾回收进程 -当参数autovacuum设为on的时候启用自动清理功能 -Launcher为清理的守护进程,每次启动的时候会调用一个或多个worker -Worker是负责真正清理工作的进程,由autovacuum_max_workers参数设定其数量
WAL writer:
-将预写日志写入磁盘文件 -触发时机:WAL BUFFER满了 事务commit时; WAL writer进程到达间歇时间时; -checkpoint发生时;
Checkpoint:
-用于保证数据库的一致性 -它会触发bgwriter和wal writer动作 -拥有多个参数控制其启动的间隔 作用: 一般checkpoint会将某个时间点之前的脏数据全部刷新到磁盘,以实现数据的一致性与完整性。其主要目的是为了缩短崩溃恢复时间 Checkpoint 具体工作:
Statistics Collector:
统计信息的收集进程。收集表和索引的空间信息和元组信息等,甚至是表的访问信息。收集到的信息除了能被优化器使用以外,还有autovaccum也能利用,甚至给数据库管理员作为数据库管理的参考信息.
主从
wal_level= replica
archive_mode=on
Pgpool的服务进程
Pcp进程:向pgpool发送管理命令的
父进程:负责检查数据库健康
Pgpool子进程:接受 发送sql
Work进程:检查延迟情况。
Pgpool logger:记录日志
Health Check:检查pg存活状态进程
多版本机制
1、更新记录会产生新版本,旧版本保留在原地不动,仅在记录头信息中标记删除记录的事务号(xmax)。
2、删除记录,旧版本存储在原地不动。仅在记录头信息中标记删除记录的事务号(xmax)。
补充: