postgresql-体系结构

发布时间 2023-07-16 22:07:07作者: 原来是你~~~
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 四种状态。

4、存储结构