2.4.5 辅助进程启动
在PostgreSQL中,守护进程Postmaster负责整个系统的启动和关闭。在一个数据库管理系统实例中,除了守护进程Postmaster和服务进程Postgres外,还包括一些其他后台进程,用于专门负责某项具体的工作。在这些辅助进程出现问题时,Postmaster进程重新产生出现问题的辅助进程。在Postmaster的创建过程中会首先启动SysLogger日志进程,并完成PgStat进程、AutoVacuum进程的初始化工作,而在Postmaster的监听循环中检测辅助进程的状态,并新建或者重新创建这些辅助进程。
1.SysLogger辅助进程
Postmaster进程调用SysLogger_Start函数启动SysLogger子进程。SysLogger是8.0以后新加的特性,它通过一个管道从Postmaster、所有后台进程以及其他的子进程那里收集所有的stderr输出,并将这些输出写入到日志文件中。在postgresql.conf配置文件中设置了日志文件的大小和存在时间,若当前的日志文件达到这些限制时,就会被关闭,并且一个新的日志文件会被创建。这些日志文件使用一种内部命名模式,文件名中包含了创建时间和当前的Postmaster的进程号pid,日志文件存储于在postgresql.conf中设置的子目录下。SysLogger辅助进程的工作原理将在2.5节中详细介绍。
2.辅助进程初始化
SysLogger辅助进程启动完后,Postmaster开始对辅助进程PgStat进程、AutoVacuum进程进行初始化操作,为进程分配必要的资源。
在PgStat进程的初始化过程中,主要完成用于发送和接收统计消息的UDP端口创建和测试,UDP端口的创建过程与前面描述的TCP端口创建流程相同,但是Socket端口类型改为SOCK_DGRAM。在端口创建完成后发送一个字节长的测试消息,当测试成功时,将创建的Socket端口设置为非阻塞IO模式,以保证在消息收集器出现故障时发送的消息能被抛弃而不会导致进程因为等待返回而阻塞;当测试失败时,发送错误消息,并关闭之前创建的UDP端口释放资源,设置track_counts选项为关闭。track_counts是一个GUC选项,它标志了PgStat是否会进行统计信息的收集。显然,如果无法创建PgStat所需的UDP端口也就肯定无法进行统计信息收集。
在AutoVacuum进程的初始化过程中,只完成AutoVacuum启用选项和track_counts启用选项的检查工作。AutoVacuum启用选项标志变量autovacuum_start_daemon会根据GUC配置进行设置,如果值为真则表示启用。在启动AutoVacuum进程时需要设置track_counts选项为启用,如果AutoVacuum启动选项标志为“启动”但是track_counts选项为关闭,则会报告错误信息。
辅助进程的初始化完成后,Postmaster启动一个辅助启动过程(函数StartupProcess)进行数据库的启动操作。其他辅助进程的启动将在循环等待连接ServerLoop中检查和启动。辅助进程的处理流程和实现细节将在2.5节中详细介绍。
【责任编辑:云霞 TEL:(010)68476606】