postgresql 客户端_Postgresql体系结构
Potgres(常駐進程)
管理后端的常駐進程,也稱為’postmaster’。其默認監聽UNIX Domain Socket和TCP/IP(Windows等,一部分的平臺只監聽tcp/ip)的5432端口,等待來自前端的的連接處理。監聽的端口號可以在PostgreSQL的設置文件postgresql.conf里面可以改。
一旦有前端連接過來,postgres會通過fork(2)生成子進程。沒有Fork(2)的windows平臺的話,則利用createProcess()生成新的進程。這種情形的話,和fork(2)不同的是,父進程的數據不會被繼承過來,所以需要利用共享內存把父進程的數據繼承過來。
postmaster(守護進程)主要職責有:
1. 數據庫的啟停
2. 監聽客戶端連接
3. 為每個客戶端連接fork單獨的postgres服務進程
4. 當postgres服務進程出錯時進行修復
5. 管理數據文件
6. 管理與數據庫運行相關的輔助進程
Postgres(子進程)
子進程根據pg_hba.conf定義的安全策略來判斷是否允許進行連接,根據策略,會拒絕某些特定的IP及網絡,或者也可以只允許某些特定的用戶或者對某些數據庫進行連接。
Postgres會接受前端過來的查詢,然后對數據庫進行檢索,最好把結果返回,有時也會對數據庫進行更新。更新的數據同時還會記錄在事務日志里面(PostgreSQL稱為WAL日志),這個主要是當停電的時候,服務器當機,重新啟動的時候進行恢復處理的時候使用的。另外,把日志歸檔保存起來,可在需要進行恢復的時候使用。在PostgreSQL 9.0以后,通過把WAL日志傳送其他的postgreSQL,可以實時得進行數據庫復制,這就是所謂的‘數據庫復制’功能。
其他的進程
Postgres之外還有一些輔助的進程。這些進程都是由常駐postgres啟動的進程。
Writer process
Writer process在適當的時間點把共享內存上的緩存寫往磁盤。通過這個進程,可以防止在檢查點的時候(checkpoint),大量的往磁盤寫而導致性能惡化,使得服務器可以保持比較穩定的性能。Background writer起來以后就一直常駐內存,但是并非一直在工作,它會在工作一段時間后進行休眠,休眠的時間間隔通過postgresql.conf里面的參數bgwriter_delay設置,默認是200微秒。
這個進程的另外一個重要的功能是定期執行檢查點(checkpoint)。
檢查點的時候,會把共享內存上的緩存內容往數據庫文件寫,使得內存和文件的狀態一致。通過這樣,可以在系統崩潰的時候可以縮短從WAL恢復的時間,另外也可以防止WAL無限的增長。 可以通過postgresql.conf的checkpoint_segments、checkpoint_timeout指定執行檢查點的時間間隔。
WAL writer process
WAL writer process把共享內存上的WAL緩存在適當的時間點往磁盤寫,通過這樣,可以減輕后端進程在寫自己的WAL緩存時的壓力,提高性能。另外,非同步提交設為true的時候,可以保證在一定的時間間隔內,把WAL緩存上的內容寫入WAL日志文件。
Archive process
Archive process把WAL日志轉移到歸檔日志里。如果保存了基礎備份以及歸檔日志,即使實在磁盤完全損壞的時候,也可以回復數據庫到最新的狀態。
stats collector process
統計信息的收集進程。收集好統計表的訪問次數,磁盤的訪問次數等信息。收集到的信息除了能被autovaccum利用,還可以給其他數據庫管理員作為數據庫管理的參考信息。
Logger process
把postgresql的活動狀態寫到日志信息文件(并非事務日志),在指定的時間間隔里面,對日志文件進行rotate.
Autovacuum啟動進程
autovacuum launcher process是依賴于postmaster間接啟動vacuum進程。而其自身是不直接啟動自動vacuum進程的。通過這樣可以提高系統的可靠性。
自動vacuum進程
autovacuum worker process進程實際執行vacuum的任務。有時候會同時啟動多個vacuum進程。
wal sender / wal receiver
wal sender 進程和wal receiver進程是實現postgresql復制(streaming replication)的進程。Wal sender進程通過網絡傳送WAL日志,而其他PostgreSQL實例的wal receiver進程則接收相應的日志。Wal receiver進程的宿主PostgreSQL(也稱為Standby)接受到WAL日志后,在自身的數據庫上還原,生成一個和發送端的PostgreSQL(也稱為Master)完全一樣的數據庫。
總結
以上是生活随笔為你收集整理的postgresql 客户端_Postgresql体系结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 强制生成32位arm程序_3. 从0开始
- 下一篇: webclient 请求期间发生异常_A