在这篇文章中,我们将讨论PostgreSQL的过程体系结构。 PostgreSQL是 客户端/服务器类型 一个主机 。
a 收集多个过程合作管理一个数据库群集通常称为 'PostgreSQL Server' ,其过程树将请在下面显示:
✔️ Postgres server process:
-
它是与数据库群集管理相关的所有过程的父母。以前,它被称为postmasterâ。
-
通过执行 pg_ctl 带有启动选项的实用程序,Postgres Server Process 启动。
-
然后,它在内存中分配共享内存区域,启动各种背景过程,必要时启动复制相关的过程和背景工作过程, 等待连接 来自客户的请求。
-
从客户端接收连接请求后, 启动了后端过程 。之后,后端流程处理连接客户端发出的所有查询。
-
postgres服务器过程与一个网络端口一起工作, 默认端口为5432 。尽管可以在同一主机上运行多个PostgreSQL Server,但端口号可以设置为5432、5433等。
✔️ Backend process:
-
一个后端过程,也称为 postgres ,由Postgres Server流程启动,并处理由一个连接的客户端发出的所有查询。
-
它通过单个TCP连接与客户通信,并在客户断开连接时终止。
-
,因为它可以 仅操作一个数据库 ,因此您必须指定一个数据库,即在连接到PostgreSQL Server时要明确使用的数据库。 p>
-
PostgreSQL允许多个客户端同时连接;配置参数 max_connections 控制客户端的最大数量(默认为100)。
-
如果许多客户重复与PostgreSQL Server的连接和断开连接,它增加了建立连接的成本 和创建后端流程,因为Postgresql 尚未实现本机连接池功能 。
-
这种情况对数据库服务器的性能产生负面影响。要处理这种情况,通常使用A 汇总中间件(PGBOUNCER或PGPOOL-II) 。
✔️ Background processes:
各种背景过程对数据库管理执行每个功能的过程。下表显示了背景过程列表。
✔️ 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 函数,也可以在系统启动并运行系统运行后启动背景工人。
在下图中,显示了前三种过程的详细信息:
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