2.4 守护进程Postmaster
完成数据集簇初始化后,用户可以启动一个数据库实例来运行数据库管理系统,多用户模式下一个数据库实例由数据库服务器守护进程Postmaster来管理。它是一个运行在服务器上的总控进程,负责整个系统的启动和关闭,并且在服务进程出现错误时完成系统的恢复。它管理数据库文件、监听并接受来自客户端的连接请求,并且为客户端连接请求fork一个Postgres服务进程,来代表客户端在数据库上执行各种命令。同时Postmaster还管理与数据库运行相关的辅助进程。用户可以使用postmaster、postgres或者pg_ctl命令启动Postmaster。
Postmaster就像一个处理客户端请求的调度中心。当客户端程序需要对数据库进行操作时,首先会发出一个起始消息给Postmaster进行请求。Postmaster将根据这个起始消息中的信息对客户端的身份进行验证,如果身份验证通过,Postmaster就为该客户端新建一个服务进程Postgres。随后Postmaster将与客户端的交互工作转交给Postgres服务进程,由Postgres来完成客户端所需要的数据库操作。Postmaster的主要作用见图2-5。
(点击查看大图)图2-5 PostgreSQL请求-响应模型 |
Postmaster也负责管理整个系统范围的操作,例如中断等操作,Postmaster本身不进行这些操作,它只是指派一个子进程在适当的时间去处理它们。同时它要在数据库崩溃的时候重启系统。Postmaster进程在起始时会建立共享内存和信号库,Postmaster及其子进程的通信就通过共享内存和信号来实现。这种多进程设计使得整个系统的稳定性更好,即使某个后台进程崩溃也不会影响系统中其他进程的工作,Postmaster只需要重置共享内存即可从单个后台进程的崩溃中恢复。
Postmaster 图2-6 Postmaster守护进程执行流程文件夹下面的代码主要用来创建一个服务器进程Postmaster,用来监听用户的连接请求,并fork子进程来处理客户端请求,此外还包含了用来进行统计、建立系统日志的代码。相应的代码位置在src/backend/posmaster文件夹中。包括下列文件:
Postmaster进程源文件postmaster.c
统计数据收集进程的源文件pqstat.c
预写式日志归档进程的源文件pgarch.c
后台写进程的源文件bgwrite.c
系统日志进程的源文件syslogger.c
系统自动清理进程的源文件autovacuum.c
Postmaster的入口函数是位于其源文件postmaster.c中的函数PostmasterMain,其流程如图2-6所示。下面将对流程的各部分作详细介绍。
完成数据集簇初始化后,用户可以启动一个数据库实例来运行数据库管理系统,多用户模式下一个数据库实例由数据库服务器守护进程Postmaster来管理。它是一个运行在服务器上的总控进程,负责整个系统的启动和关闭,并且在服务进程出现错误时完成系统的恢复。它管理数据库文件、监听并接受来自客户端的连接请求,并且为客户端连接请求fork一个Postgres服务进程,来代表客户端在数据库上执行各种命令。同时Postmaster还管理与数据库运行相关的辅助进程。用户可以使用postmaster、postgres或者pg_ctl命令启动Postmaster。
Postmaster就像一个处理客户端请求的调度中心。当客户端程序需要对数据库进行操作时,首先会发出一个起始消息给Postmaster进行请求。Postmaster将根据这个起始消息中的信息对客户端的身份进行验证,如果身份验证通过,Postmaster就为该客户端新建一个服务进程Postgres。随后Postmaster将与客户端的交互工作转交给Postgres服务进程,由Postgres来完成客户端所需要的数据库操作。Postmaster的主要作用见图2-5。
(点击查看大图)图2-5 PostgreSQL请求-响应模型 |
Postmaster也负责管理整个系统范围的操作,例如中断等操作,Postmaster本身不进行这些操作,它只是指派一个子进程在适当的时间去处理它们。同时它要在数据库崩溃的时候重启系统。Postmaster进程在起始时会建立共享内存和信号库,Postmaster及其子进程的通信就通过共享内存和信号来实现。这种多进程设计使得整个系统的稳定性更好,即使某个后台进程崩溃也不会影响系统中其他进程的工作,Postmaster只需要重置共享内存即可从单个后台进程的崩溃中恢复。
Postmaster 文件夹下面的代码主要用来创建一个服务器进程Postmaster,用来监听用户的连接请求,并fork子进程来处理客户端请求,此外还包含了用来进行统计、建立系统日志的代码。相应的代码位置在src/backend/posmaster文件夹中。包括下列文件:
Postmaster进程源文件postmaster.c
统计数据收集进程的源文件pqstat.c
预写式日志归档进程的源文件pgarch.c
后台写进程的源文件bgwrite.c
系统日志进程的源文件syslogger.c
系统自动清理进程的源文件autovacuum.c
Postmaster的入口函数是位于其源文件postmaster.c中的函数PostmasterMain,其流程如图2-6所示。下面将对流程的各部分作详细介绍。
图2-6 Postmaster守护进程执行流程 |
【责任编辑:云霞TEL:(010)68476606】