跳转至

PostgreSQL 进程架构

PostgreSQL Process Architecture

PostgreSQL-Architecture

postgresql-process-architect

进程架构

PostgreSQL是一个多进程架构的客户端/服务器模式的关系型数据库管理系统。PG数据库中的一系列进程组合进来就是PostgreSQL服务端。这些进程可以细分为以下几大类:

  • postgres server进程 -是PG数据库中所有进程的父进程。

  • backend进程 - 每个客户端对于一个backend进程,处于这个客户端中的所有请求。

  • background进程 - 包含多个后台进程,比如做脏块刷盘的BACKGROUND WRITER进程,做垃圾清理的AUTOVACUUM进程,做检查点的CHECKPOINTER进程等。

  • replication相关进程 - 处理流复制的进程。

  • background workder进程 - PG9.3版本增加,执行由用户自定义开发的逻辑。

postgresql-processes

从上图可以看出,PG数据库中有一个主的postgres server进程,针对每个客户端有一个backend postgres进程,另外有一系列的background后台进程(针对不同的功能模块)。所以这些进程都对应一个共享内存shared memory。

下面我们再具体学习一下每类进程的主要工作内容。

Postgres Server Process

postgres server process是所有PG进程的父进程,在以前的版本中称为postmaster。当使用pg_ctl start启动数据库时,这个进程就被启动了, 然后它会启动一个共享内存shared memory,启动多个background后台进程,启动复制相关进程,如有需要也启动background worker progress,然后等待客户端的连接。

当接收到一个客户端连接时,它就会启动一个backend progress,专门服务于这个客户端。

postgres server process通常有一个对应的监听端口,默认是5432。如果一台机器上安装多个postgres实例有多个postgres server process,那么就需要修改对应的端口地址比如5433、5434等。

Backend Process

backend process也称为postgres进程,是由上面的postgres server process启动的用于服务于对应的客户端,通过TCP协议和客户端进行通信。
由于这个进程只能服务于一个特定的database,所以需要在连接PG数据库的时候指定一个默认连接的database。

PG允许多个客户端同时连接数据库,由max_connections参数控制最大并发连接数,默认是100。

如果有很多客户端频繁的对数据库进行短连接与释放连接,那么可能会造成连接耗时比较长,因为PG目前没有连接池的功能。针对于这种场景,一般通过像pgbouncer或pgpool-II这种插件来优化。

Background Process

background process后台进程有多个,每个进程负责一个模块或是一类任务,下面表格总结每个进程的描述。

https://learnomate.org/in-depth-exploration-of-postgresqls-process-architecture/

https://www.linkedin.com/pulse/in-depth-exploration-postgresqls-process-architecture-ankush-thavali-mrkjf/

https://medium.com/@sumeet.k.shukla/postgresql-architecture-6df259dc1145

捐赠本站(Donate)

weixin_pay
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))