PostgreSQL進程分析

一、PostgreSQL進程

        PostgreSQL是一個C/S架構的數據庫管理系統,一個服務器上運行多個進程。postmaster是pg的主進程,也是父進程。後端進程和後臺工作進程都是由主進程派生出來,同時具有監聽功能。數據庫的功能和管理是通過後臺工作進程來實現的。

  • logger process

日誌進程。把postgresql的活動狀態寫到日誌信息文件(並非事務日誌),在指定的時間間隔裏面,對日誌文件進行rotate。每一個進程信息都會被記錄在pgdata/pg_log目錄下的.log文件裏。

注意:如果數據目錄是通過 INITDB 命令創建的,pg_log 目錄不會在數據目錄裏自動創建,需要顯示地創建該目錄。

  • checkpointer process

檢查點進程,各種類型的檢查點實現,有點兒類似於虛擬機的快照。檢查的作用主要是縮短數據庫恢復的時間。

 

  • writer process

    Writer process在適當的時間點把共享內存上的緩存寫往磁盤。 通過這個進程,可以防止在檢查點的時候(checkpoint),大量的往磁盤寫而導致性能惡化,使得服務器可以保持比較穩定的性能。
        Background writer起來以後就一直常駐內存,但是並非一直在工作,它會在工作一段時間後進行休眠,休眠的時間間隔通過postgresql.conf裏面的參數bgwriter_delay設置,默認是200微秒。
        這個進程的另外一個重要的功能是定期執行檢查點(checkpoint)。檢查點的時候,會把共享內存上的緩存內容往數據庫文件寫,使得內存和文件的狀態一致。通過這樣,可以在系統崩潰的時候可以縮短從WAL恢復的時間,另外也可以防止WAL無限的增長。可以通過postgresql.conf的checkpoint_segments、checkpoint_timeout指定執行檢查點的時間間隔。

  • wal writer process

        預寫式日誌寫進程。預寫式日誌寫進程在適當間隔時會寫入並進行文件同步。爲了保證事務安全,預寫式日誌緩衝區在事務日誌裏持有數據庫的更改操作。預寫式日誌緩衝區在每次事務提交時寫到磁盤,預寫式日誌寫進程負責寫到磁盤。

  • autovacuum launcher process

        自動清理啓動器進程。自動清理進程是一個可選進程,默認是開啓的。爲了自動執行VACUUMANALYZE命令,自動清理啓動器進程是由許多被稱爲autovacuum workers(自動清理工作者)組成的後臺進程。自動清理啓動器進程負責啓動autovacuum workers(自動清理工作者)進程來處理所有數據庫。啓動器會按交叉時間地分發工作,在每個時間間隔裏會試圖在每一個數據庫裏啓動一個工作者(我注:指autovacuum workers),通過參數autovacuum_naptime來設置間隔時間。每個數據庫都會啓動一個工作者,通過參數autovacuum_max_workers來設置最大數。每一個工作者進程都會在它所在的數據庫裏檢查每一張表,然後在有需要的時候執行VACUUM或者ANALYZE命令。

  • stats collector process

狀態收集進程。狀態收集進程會收集一些關於服務器運行的信息,包括表的訪問次數,磁盤的訪問次數等信息。收集到的信息除了能被autovaccum利用,還可以給其他數據庫管理員作爲數據庫管理的參考信息。    
 

二、模式

1.模式

    模式是一個命名空間,位於數據和表、視圖之間,不同的模式下可以有相同名稱的表、函數等對象。只要有權限,不同模式(schema)中的對象可以互相調用。PostgreSQL中模式的概念類似java中的namespace。

2.模式的用途

  • 允許多個用戶使用同一個數據庫又不會干擾其他用戶。

  • 把數據庫對象放在不同的模式下,相當於組織成邏輯組,讓它們更便於管理。

  • 第三方的應用可以放在不同的模式中,這樣就不會和現有的對象的名字衝突了

3.公共模式

創建和訪問表的時候都不用指定模式,實際上這時訪問的都是“public”模式。當我們創建一個新的數據庫時,PostgreSQL都會爲我們默認創建一個名爲“public”的模式

三、日誌及客戶端

PostgreSQL的日誌存儲在/data/pg_log目錄下(如/var/lib/pgsql/9.6/data/pg_log),出問題後需要及時查看。

在服務器上常用的客戶端是psql,可以直接連接然後查看數據庫。常用命令有:

psql   直接連接數據庫
psql  -p 5433 指定端口
\?  查看internal commands的用法
\h  查看sql commands的幫助
\l  list databases
\d  list tables,views,and sequences
\dt [pattern] list tables
\x   toggle expanded output
\i   file execute command from file
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章