啓動服務之後,在有無客戶端鏈接的進程對比sql
上半部分是沒有psql鏈接時的進程狀態,下半部分是鏈接一個psql時候的進程狀態。經過對比能夠發現,當有客戶端鏈接的時候,啓動一個postgres進程。同理,當再增長一個客戶端鏈接的時候,也再起一個postgres進程。數據庫
守護進程postmaster緩存
數據庫服務的主控制進程,負責整個系統的開啓和關閉,在其餘服務進程發生錯誤時完成系統恢復,當有客戶端請求時,fork一個postgres進程。如上圖,增長一個psql鏈接之後,增長一個postgres進程。函數
守護進程入口函數postmaste.cpost
void PostmasterMain(int argc, char *argv[])
3. checkpointer進程日誌
檢查點進程,各類類型的檢查點實現。檢查的做用主要是縮短數據庫恢復的時間。code
checkpointer進程入口,checkpointer.c進程
void CheckpointerMain(void)
4. writer進程內存
writer進程在適當的時間,將共享內存上的緩存寫入磁盤。it
writer進程入口,bgwriter.c
void BackgroundWriterMain(void)
5. wal writer進程
預寫日誌進程,一種比較高效的日誌模式,在數據庫進行操做是,先將數據寫入到日誌文件,而後再寫入數據庫,因爲 是順序寫,效率比通常的日誌模式快。相似的,SQLite也有WAL模式。
wal writer進程入口,Walwriter.c
void WalWriterMain(void)
6. autovacuum 進程
執行自動vacuum任務。
autovacuum進程入口,autovacuum.c
NON_EXEC_STATIC void AutoVacLauncherMain(int argc, char *argv[])
7. stats colletcor進程
統計信息收集進程,收集表的訪問次數,磁盤的訪問次數等信息。
8. 完