一、进程和内存架构

二、进程Postmaster

Postmaster是整个数据库实例的总控进程, 负责启动和关闭该数据库的实例. 平时我们使用的 pg_ctl命令其实 也是运行 Postmaster 和 postgres命令加上合适的参数来启动数据库, 只是又做了一层包装, 方便用户操作.

用户可以运行postmaster、postgres命令并加上合 适的参数来启动数据库

ls -al /usr/local/bin/postmaster

当然更多的时候我们使用pg_ctl来启动数据库,pg_ctl也是通过运行postgres命令来启动数据库的,只是它做 了一些包装,让我们更容易启动数据库

当有用户连接进来时, PostgreSQL建立连接的时候, 实际上是先于Postmaster进程建立连接. 此时客户端程序 会发出身份验证消息给Postmaster进程, 如果验证成功, Postmaster会fork出子进程来为该连接服务. fork出来 的子进程被成为服务进程, 可使用命令查看:

select pid, usename,client_addr, client_port fromm pg_stat_activity;

与mysql的区别: postgresql:每次客户端与数据库建立连接时,PostgreSQL数据库都会启动一个服务进程来为该连接服务 mysql:MySQL数据库每建立一个连接时启动的是一个线程,所以MySQL数据库是线程架构模型

如果某些进程有问题了,postgresql如何处理: Postmaster主进程会自动完成系统恢复。恢复过程中暂停服务,恢复成功后允许正常连接请求

三、Logger系统日志进程

与日志相关输出的进程 参数logging_collect设置为“on”时,主进程才会启动Logger辅助进程

四、BgWriter后台写进程介绍

在PostgreSQL中,BgWriter辅助进程是把共享内存中的脏页写到磁盘上的进程 BgWriter辅助进程可周期性地把内存中的脏数据刷新到磁盘中,刷新频率既不能太快,也不能太慢

五、PgArch归档进程

作用:

  • WAL日志会循环使用,也就是说,较早期的WAL日志会被覆盖。PgArch归档进程会在覆盖前把WAL日志 备份出来

  • 提供指定时间点的恢复:在对数据库进行过一次全量备份后,使用该技术将备份时间点之后的 WAL日志通过归档进行备份,使用数据库的全量备份再加上后面产生的WAL日志,可以恢复到任意时间点

六、PgStat统计数据收集进程

作用:

  • PgStat辅助进程主要做数据的统计收集工作。收集的信息主要用于查询优化时的代价估算,包括表,索引 等等操作情况

  • pg_statistic中存储了PgStat收集的各类统计信息

七、AutoVacuum自动清理进程

DELETE:原有数据并不会立即被删除, UPDATE:不会在原有数据上做更新,而是会新生成一行数据,原有数据只是被标识为删除状态

判断没有并发的其他事务读到这些旧数据时,才会将其清除。这个清除工作就是由AutoVacuum进程来完成的

八、WalWriter预写式日志写进程

WalWriter进程就是写WAL日志的进程。预 写式日志的概念就是,在修改数据之前必须把这些修改操作记录到磁盘中

WAL日志保存在pg_xlog下。xlog文件的默认大小16MB

九、BGWriter与Checkpoint进程的区别

Checkpoint的目的是以特定的时间间隔刷新所有脏页,并创建一个用于数据库恢复用的检查点。它的主要 工作目标是确保在发生故障时能够快速地从最近的一个一致性点恢复到正常状态。1

BGWriter 在检查点之间刷新一些脏页面,这样做是为了始终保持足够数量的干净页面可用。它的主要工 作目标是减少对磁盘的写入操作,从而提高数据库的性能。