1、体系结构
体系结构主要由实例和存储结构组成,而实例由进程和内存结构组成;存储结构分为逻辑存储结构和物理存储结构。
2、进程结构
查看运行进程信息
$ ps -ef | grep postgre
postgres 1161 1 0 15:10 ? 00:00:00 /opt/postgres/bin/postgres -D /pgdata
postgres 1163 1161 0 15:10 ? 00:00:00 postgres: checkpointer
postgres 1164 1161 0 15:10 ? 00:00:00 postgres: background writer
postgres 1165 1161 0 15:10 ? 00:00:00 postgres: walwriter
postgres 1166 1161 0 15:10 ? 00:00:00 postgres: autovacuum launcher
postgres 1167 1161 0 15:10 ? 00:00:00 postgres: stats collector
postgres 1168 1161 0 15:10 ? 00:00:00 postgres: logical replication launcher
- portmaster 主进程,是整个数据库实例的总控制进程,负责启动和关闭数据库实例。通过运行 postgres 命令加上合适的参数启动数据库。实际上,postmaster 命令是一个指向 postgres 的链接。虽然平时更多的是使用 pg_ctl 启动数据库,实际上也是通过运行 postgres 启动数据库,只是做了一些封装,更容易操作数据库实例。postmaster 会 fork 一些与数据库实例相关的辅助子进程,并管理它们。
查看进行信息
test=# select pid,wait_event,backend_type from pg_stat_activity;
- syslogger 进程,在 postgresql.conf 里启用运行日志 pg_log 后,会有syslogger 进程。syslogger 进程会在日志文件达到指定的大小时关闭当前的日志文件,产生新的日志文件。
postgersql.conf 中配置参数如下:
log_destination : 配置日志输出目标,不同的运行平台对应不同的值,Linux 默认为stderr。
logging_collector : 是否开启日志收集器,设置为 on 时启动日志功能,否则将不产生系统日志辅助进程。
log_directory : 配置日志输出文件夹。
log_filename : 配置日志文件名称命名规则。
log_rotation_size : 配置日志文件大小。达到这个大小,即创建一个日志文件记录日志信息。
-
bgwriter 后台写进程,在后台将脏页刷新到磁盘的辅助进程。
-
walwriter 预写式日志WAL,先记录日志后写数据。
-
pgarch 归档进程,从 postgresql 8.X 开始,有了 PITR(point-in-time-recovery)技术,该技术支持将数据库恢复到其运行历史中任意一个有记录的时间点;PITR 另一个重要的就是对WAL文件进行归档。postgresql 默认是非归档模式,需要启用。
-
autovacuum 自动清理进程,在 PG 数据库中,对数据进行update 或者delete 操作,数据库不会立即删除旧版本的数据,而是标记为删除状态。支持多版本机制,当旧版本数据没有价值了,需要清理垃圾数据腾出空间。
-
pgstat 统计信息收集进程,收集数据库运行期间的统计信息。
-
checkpoint 检查点进程。
3、内存结构
内存结构分为本地内存和共享内存。
本地内存(PGA):每个后端进程自己使用的。
-
work_mem,使用 work_mem 区域用于对元组的排序,比如 order by、distinct 操作。也用于表的 join 操作,比如 merge-join、hash-join 操作,默认是 4MB。
-
maintenance_work_mem 用于一些维护操作。比如 vacuum、reindex、alter table add foreign key。默认64MB。
-
temp_buffers 存放临时表,默认是8MB。该参数设置每个数据库会话使用的临时缓冲区的最大值。
共享内存(SGA),所有进程共同使用。
-
shared buffer PG将表和索引中的页面从持久存储加载到共享缓冲池中进行操作,默认128MB。
-
wal buffer 存放wal数据
-
commit log 提交日志保存所有事物的状态,是并发控制机制的一部分。事务有 in_progress、commited、aborted、sub-commited 四种状态。