PG-进程结构

Posted binliubiao

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PG-进程结构相关的知识,希望对你有一定的参考价值。

1. PG 主要进程及其辅助子进程

# 下面分别截图主从异步复制进程

技术图片

技术图片


2.  进程作用及其职责

2.1 postmaster进程

主进程postmaster是整个数据库实例的总控进程,负责启动和关闭数据库实例。


主要职责是:
     数据库的启停
     监听客户端连接
     为每个客户端连接fork单独的postgres服务进程
     当服务进程出错时进行修复
     管理数据文件
     管理数据库运行相关的辅助进程
当客户端调用接口向数据库发起连接请求时,先于postmaster进程建立连接,此时客户端程序发出身份验证信息给主进程postmaster, postmaster主进程进行身份验证,如果验证通过,则进程postmaster会fork单独的服务进程postgres 为客户端提供服务,此后由postgres服务进程为客户端执行各种命令,客户端也不需要postmaster进行中转,直接与服务进程postgres进行通讯。当某个服务进程出现错误时,postmaster主进程会自动完成系统的恢复。恢复过程会停止所有的服务进程,然后进行数据一致性恢复,等恢复完成后,重新接收新连接。

-- 服务进程

技术图片

2.2 日志进程 logger

当开启日志参数时,logger进程收集所有其他(postmaster,服务进程及其它辅助进程)的进程stderr输出,并将这些输出写入到文件中形成日志。

参数配置:

vi ${PGDATA}/postgresql.conf
logging_collector = ‘on‘

2.3 后台写进程 background writer

Bgwriter辅助进程是把共享内存中的脏页写到磁盘上的进程。当往数据库中插入或更新数据时,并不是会马上写到数据文件中,而是先放在共享内存中。Bgwriter辅助进程可以周期性地把内存中的脏数据刷新到磁盘中。

2.4 预写日志 walwriter

所谓wal日志,即write ahead log,在一些较低的版本中,也称为xlog。预写的意思就是在修改数据之前,必须要把这些修改操作记录到磁盘中,这样后面更新实际数据时,就不要把数据持久化到文件中了。即使机器突然宕机或数据库异常退出导致一部分数据没有及时的刷新到磁盘。在数据库重启后,通过读取wal日志,并把最后一部分wal日志重新执行一遍,就可以恢复宕机时的状态。
wal默认保存在pg_wal文件夹(低版本保持在wal_log/pg_xlog)中,该目录会产生多个wal日志,每个wal日志默认16M, 不需要的wal日志会被自动覆盖掉。

技术图片

-- wal命名格式(文件名称为16进制的24个字符组成,每8个字符一组,每组的意义如下:
00000001 00000000 00000001
-------- -------- -------- 
时间线     逻辑id    物理id

-- wal时间
select pg_walfile_name(pg_current_wal_lsn());
select * from pg_ls_waldir() order by modification asc;

-- pg_waldump查看wal文件内容
${PGHOME}/bin/pg_waldump 00000001000000000000000F|more

技术图片


2.5 归档进程 archive

WAL日志会被循环使用,即较早时间的wal日志会被覆盖。archive进程负责将wal日志备份到指定的归档目录。

# 参数配置 $PGDATA/postgresql.conf
# - Archiving -

#archive_mode = off             # enables archiving; off, on, or always
                                # (change requires restart)
#archive_command = ‘‘           # command to use to archive a logfile segment
                                # placeholders: %p = path of file to archive
                                #               %f = file name only
                                # e.g. ‘test ! -f /mnt/server/archivedir/%f && cp %p /mnt/server/archivedir/%f‘
#archive_timeout = 0            # force a logfile segment switch after this
                                # number of seconds; 0 disables


2.6 自动清理 autovacuum进程

在PostgreSQL数据库中,对表进行delete后。不会立即删除数据,并且在更新数据时,也不会在旧的数据上进行更新,而是生成一行新数据,旧的数据被标志删除状态,只有在没有并发的其他事物读到这些旧数据时,它们才会被清楚掉。这个清楚工作就是由autovacuum进程来完成的。

2.7 checkpointer

checkpointer 是数据库的检查点进程

2.8 stats collector

主要做数据的统计收集工作,收集的信息主要用于查询优化代价评估。系统表pg_statistic中存储了stats collector进程收集的各类(表和索引进行了多少次插入,更新,删除操作,磁盘块读写次数及行的读写次数)统计信息。

2.9

2.10

以上是关于PG-进程结构的主要内容,如果未能解决你的问题,请参考以下文章

pg快速入门--体系结构

图解PostgreSQL进程结构和内存结构

pg查询处理流程

PG基础篇--逻辑结构管理(锁机制)

在 Python 多处理进程中运行较慢的 OpenCV 代码片段

pg_dump & pg_restore 密码使用 python 模块子进程