一、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
自動清理啓動器進程。自動清理進程是一個可選進程,默認是開啓的。爲了自動執行VACUUM
和ANALYZE
命令,自動清理啓動器進程是由許多被稱爲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