PostgreSQL使用一種專用服務器進程體系結構,其中,最主要的兩個進程就是守護進程Postmaster和服務進程Postgres。從本質上來說,Postmaster和Postgres都是通過載入Postgres程序而形成的進程,只是在運行時所處的分支不同而已。守護進程 Postmaster負責整個系統(tǒng)的啟動和關閉。它監(jiān)聽并接受客戶端的連接請求,為其分配服務進程Postgres。服務進程Postgres接受并執(zhí)行客戶端發(fā)送的命令。它在底層模塊(如存儲、事務管理、索引等)之上調用各個主要的功能模塊(如編譯器、優(yōu)化器、執(zhí)行器等),完成客戶端的各種數據庫操作,并返回執(zhí)行結果。
Postmaster和Postgres程序
在Unix或Linux系列的系統(tǒng)下,Postmaster僅僅是Postgres的一個符號鏈接;而在Windows系統(tǒng)下,Postmaster是Postgres的一個拷貝。所以PostgreSQL系統(tǒng)幾乎所有的核心功能都是由Postgres程序完成的。
PostgreSQL守護進程Postmaster(單用戶模式下的Postgres進程)除為用戶連接請求分配后臺Postgres服務進程外,還將啟動相關的后臺輔助進程。守護進程Postmaster在完成基本運行環(huán)境初始化、創(chuàng)建接受用戶請求的監(jiān)聽端口后,順序啟動如下系統(tǒng)輔助進程:SysLogger(系統(tǒng)日志進程)、PgStat(統(tǒng)計數據收集進程)、AutoVacuum(系統(tǒng)自動清理進程)。在守護進程 Postmaster進入到循環(huán)監(jiān)聽中時啟動如下進程:BgWriter(后臺寫進程)、WalWriter(預寫式日志寫進程)、PgArch(預寫式日志歸檔進程)。這些輔助進程的用途在2.5節(jié)有詳細介紹。
PostgreSQL采用C/S模式,系統(tǒng)為每個客戶端分配一個服務進程。前端應用欲訪問某一數據庫時,就調用接口庫(比如ODBC、libpq)把用戶的請求通過網絡發(fā)給守護進程Postmaster。Postmaster將啟動一個新的服務進程Postgres為用戶服務,此后前端進程和服務進程不再通過Postmaster而是直接進行通信。也就是說,Postmaster總是監(jiān)聽用戶連接請求并為用戶分配服務進程Postgres,而 Postgres則負責為客戶端執(zhí)行各種命令。