2.5 辅助进程
PostgreSQL的各个辅助进程完成特定的功能,支撑PostgreSQL系统运行和管理工作。在Postmaster进程中,为每个辅助进程设置了一个全局变量来标识该进程的进程号,分别为SysLoggerPID、BgWriterPID、WalWriterPID、AutoVacPID、PgArchPID、PgStatPID。当这些变量值为0时,表示相应的进程尚未启动。只有系统日志辅助进程Syslogger在Postmaster进入监听循环之前完成启动操作,在监听循环中检测其状态进行重启操作;其他辅助进程的进程号在进入监听循环之前都被设置为0,因此它们的初次启动和重新启动操作都会在Postmaster的监听循环中执行。在监听循环ServerLoop中,每一次循环时都会检查各个辅助进程号所对应的全局变量值是否为0,并根据系统中进程运行状态机标志变量pmState的状态值来启动相应的辅助进程。
BgWriter和WalWriter辅助进程采用相同的模式启动,设置辅助进程的类型type,调用StartChildProcess(type)进入复制子进程(fork)操作流程,复制子进程成功后在父进程中直接返回,在子进程中封装传递参数av、ac,关闭父进程中继承的端口,并切换内存上下文,进入统一的子进程处理函数AuxiliaryProcessMain(ac,av)。在其中根据type类型启动各辅助进程。其他的辅助进程使用其对应的独立启动入口。下面将详细介绍每个辅助进程的处理流程和实现原理。
【责任编辑:云霞 TEL:(010)68476606】