postgresql中的主要进程

本文详细介绍了PostgreSQL启动时的四个主要进程:PostmasterMain、SubPostmasterMain、AuxiliaryProcessMain和PostgresMain,包括各自的功能和步骤。此外,还阐述了Catalog的导入过程,涉及目录创建、内存池初始化、backend初始化以及bki文件的解析和执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Postgres在启动后,可分别以一下四种形式启动进程:
* SubPostmasterMain
* AuxiliaryProcessMain
* PostgresMain
* PostmasterMain

PostmasterMain
1. 设置进程ID
2. 初始化内存池
3. 设置路径、时间等变量
4. 初始化GUC选项,处理输入参数并载入hba和ident
5. 设置共享内存和信号量,初始化共享数据结构
6. 设置信号处理句柄
7. 启动守护进程:
   (1) syslogger:收集其他其他进程的日志输出,写入到文件
   (2) stats daemon:通过UDP获取各backend的运行时统计信息
   (3) autovacuum launcher:定期进行表空间的自动清理
8. 由参数forkboot启动一个backend
9. 绑定到TCP socket,监听连接请求

PostgresMain(--single)
1. 设置进程ID
2. 初始化内存池
3. 设置路径、时间等变量
4. 初始化GUC选项,处理输入参数和其他startup packet中的参数
5. 设置信号处理句柄
6. 初始化一个backend(无论它是否由postmaster生成):ipc, lock, file, storage, buffer
7. 启动XLOG
8. 加载FreeSpaceMap
9. 初始化进程
10. 初始化表缓存和系统目录访问
11. 处理预加载的库
12. 转到MessageContext内存池
13. 进入查询处理主循环

SubPostmasterMain&#x

### PostgreSQL 中的进程间通信方法、机制与实现 #### 进程间通信的重要性 系统中的进程可以是独立的,也可以是协作的。对于协作的进程而言,必然会受到其他进程的影响,因此进程间的通信变得至关重要[^4]。 #### 使用的IPC机制 PostgreSQL采用两种主要进程间通信(IPC)机制来确保高效稳定的多进程操作: - **System V IPC机制** - **POSIX IPC机制** 这两种机制共同作用于PostgreSQL内部的不同组件之间,提供必要的同步和数据交换能力。 #### 主要的IPC工具和技术 ##### 1. 共享内存 作为最高效的进程间通讯手段之一,在PostgreSQL中被广泛应用于存储临时性的全局状态信息和其他需要快速访问的数据结构。共享内存允许多个进程直接读写同一块物理内存区域内的内容,从而极大地提高了效率[^2]。 ```c // 创建或获取已存在的共享内存段 key_t key = ftok("/tmp", 'R'); int shmid = shmget(key, sizeof(struct shared_use_st), 0644 | IPC_CREAT); struct shared_use_st *shared_memory = (struct shared_use_st *)shmat(shmid, NULL, 0); if(shared_memory == (void*)-1){ perror("shmat"); } ``` ##### 2. 信号量 用于保护临界区资源免受竞争条件影响的安全措施。每当有新连接到来时,Postmaster主控进程就会创建一个新的子工作进程,并利用信号量来进行初始化阶段的任务分配以及后续运行期间的状态协调等工作[^5]。 ##### 3. 消息队列 尽管不如前两者常用,但在某些特定场景下仍然发挥着重要作用。消息队列能够帮助不同的后台辅助进程异步传递通知事件给前端应用层或其他服务端模块,进而触发相应的业务逻辑处理流程。 ##### 4. Unix域套接字 除了上述三种传统意义上的IPC设施外,Unix域套接字也构成了PostgreSQL网络监听接口的一部分。它使得本地客户端程序可以通过文件系统的路径名建立到服务器实例之间的安全可靠连接通道[^1]。 #### 并发控制与性能考量 值得注意的是,并行查询虽然理论上能带来更好的吞吐率表现,但实际上由于引入了额外的数据分片过程、复杂的进程/线程交互协议等因素,有时反而会对整体执行速度造成负面影响。为此,合理设计优化器策略就显得尤为重要——既要充分利用硬件资源的优势又要尽可能减少不必要的开销损耗[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值