PostgreSQL过程体系结构
#postgres #database #apacheage #agedb

在这篇文章中,我们将讨论PostgreSQL的过程体系结构。 PostgreSQL是 客户端/服务器类型 一个主机

a 收集多个过程合作管理一个数据库群集通常称为 'PostgreSQL Server' ,其过程树将请在下面显示:

Process Tree

✔️ Postgres server process:

  • 它是与数据库群集管理相关的所有过程的父母。以前,它被称为postmasterâ

  • 通过执行 pg_ctl 带有启动选项的实用程序,Postgres Server Process 启动

Postgres server process

  • 然后,它在内存中分配共享内存区域,启动各种背景过程,必要时启动复制相关的过程和背景工作过程, 等待连接 来自客户的请求。

  • 从客户端接收连接请求后, 启动了后端过程 。之后,后端流程处理连接客户端发出的所有查询。

  • postgres服务器过程与一个网络端口一起工作, 默认端口为5432 。尽管可以在同一主机上运行多个PostgreSQL Server,但端口号可以设置为5432、5433等。

✔️ Backend process:

  • 一个后端过程,也称为 postgres ,由Postgres Server流程启动,并处理由一个连接的客户端发出的所有查询。

  • 它通过单个TCP连接与客户通信,并在客户断开连接时终止。

  • ,因为它可以 仅操作一个数据库 ,因此您必须指定一个数据库,即在连接到PostgreSQL Server时要明确使用的数据库。

  • PostgreSQL允许多个客户端同时连接;配置参数 max_connections 控制客户端的最大数量(默认为100)。

  • 如果许多客户重复与PostgreSQL Server的连接和断开连接,它增加了建立连接的成本 和创建后端流程,因为Postgresql 尚未实现本机连接池功能

  • 这种情况对数据库服务器的性能产生负面影响。要处理这种情况,通常使用A 汇总中间件(PGBOUNCER或PGPOOL-II)

✔️ Background processes:

各种背景过程对数据库管理执行每个功能的过程。下表显示了背景过程列表。

Background Process

✔️ Replication associated processes:

  • 在相关的复制过程中,它们执行流复制。

  • 在流复制中,三种过程合作起作用。主服务器上的A Walsender Process 将WAL数据发送到备用服务器;然后,A walreceiver 和A 启动 备用服务器上的流程会接收并重播这些数据。 Walsender和Walreceiver使用单个TCP连接进行通信。

✔️ Background worker process:

  • 它可以执行用户实现的任何处理 或在单独的过程中运行用户供应代码。此类过程是由Postgres启动,停止和监视的,这使他们可以将 寿命链接到服务器状态。

  • 这些过程附加到PostgreSql的 共享内存区域 ,并且可以选择内部连接到数据库;它们还可以串行运行多个交易,就像常规客户连接的服务器流程一样。

  • 可以在 sharone_preload_libraries 中加入模块名称开始,可以在PostgreSQL开始时初始化背景工人。

  • 希望运行背景工人的模块可以通过致电 registerbackgroundworker(boundgrackworker *worker)从其 _ pg_init() 强>功能。

  • 通过调用 registerdynamicbackgroundworker 函数,也可以在系统启动并运行系统运行后启动背景工人。

在下图中,显示了前三种过程的详细信息:

Details
postgreSQL服务器的实际过程如下所示。在下面的示例中,一个Postgres服务器进程(PID为9687),两个后端进程(PID为9697和9717),以及此处列出的几个背景过程:

postgres> pstree -p 9687
-+= 00001 root /sbin/launchd
 \-+- 09687 postgres /usr/local/pgsql/bin/postgres -D /usr/local/pgsql/data
   |--= 09688 postgres postgres: logger process     
   |--= 09690 postgres postgres: checkpointer process     
   |--= 09691 postgres postgres: writer process     
   |--= 09692 postgres postgres: wal writer process     
   |--= 09693 postgres postgres: autovacuum launcher process     
   |--= 09694 postgres postgres: archiver process     
   |--= 09695 postgres postgres: stats collector process     
   |--= 09697 postgres postgres: postgres sampledb 192.168.1.100(54924) idle  
   \--= 09717 postgres postgres: postgres sampledb 192.168.1.100(54964) idle in transaction  

✔️ References:

  1. https://age.apache.org/
  2. https://github.com/apache/age
  3. https://www.interdb.jp/pg/index.html