2.3 PostgreSQL进程结构
PostgreSQL系统的主要功能都集中于Postgres程序,其入口是Main模块中的main函数,在初始化数据集簇、启动数据库服务器时,都将从这里开始执行。Main模块主要的工作是确定当前的操作系统平台,并据此做一些平台相关的环境变量设置和初始化,然后通过对命令行参数的判断,将控制转到相应的模块中去。图2-4是main函数的调用流程。
【责任编辑:
TEL:(010)68476606】
图2-4 PostgreSQL系统主函数main的流程 |
PostgreSQL使用一种专用服务器进程体系结构,其中,最主要的两个进程就是守护进程Postmaster和服务进程Postgres。从本质上来说,Postmaster和Postgres都是通过载入Postgres程序而形成的进程,只是在运行时所处的分支不同而已。守护进程Postmaster负责整个系统的启动和关闭。它监听并接受客户端的连接请求,为其分配服务进程Postgres。服务进程Postgres接受并执行客户端发送的命令。它在底层模块(如存储、事务管理、索引等)之上调用各个主要的功能模块(如编译器、优化器、执行器等),完成客户端的各种数据库操作,并返回执行结果。
Postmaster和Postgres程序
在Unix或Linux系列的系统下,Postmaster仅仅是Postgres的一个符号链接;而在Windows系统下,Postmaster是Postgres的一个拷贝。所以PostgreSQL系统几乎所有的核心功能都是由Postgres程序完成的。
PostgreSQL守护进程Postmaster(单用户模式下的Postgres进程)除为用户连接请求分配后台Postgres服务进程外,还将启动相关的后台辅助进程。守护进程Postmaster在完成基本运行环境初始化、创建接受用户请求的监听端口后,顺序启动如下系统辅助进程:SysLogger(系统日志进程)、PgStat(统计数据收集进程)、AutoVacuum(系统自动清理进程)。在守护进程Postmaster进入到循环监听中时启动如下进程:BgWriter(后台写进程)、WalWriter(预写式日志写进程)、PgArch(预写式日志归档进程)。这些辅助进程的用途在2.5节有详细介绍。
PostgreSQL采用C/S模式,系统为每个客户端分配一个服务进程。前端应用欲访问某一数据库时,就调用接口库(比如ODBC、libpq)把用户的请求通过网络发给守护进程Postmaster。Postmaster将启动一个新的服务进程Postgres为用户服务,此后前端进程和服务进程不再通过Postmaster而是直接进行通信。也就是说,Postmaster总是监听用户连接请求并为用户分配服务进程Postgres,而Postgres则负责为客户端执行各种命令。