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