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