Postgresql資料庫體系結構-程式和記憶體結構
資料庫體系結構-程式和記憶體結構(Process and Memory Architecture)
- 程式結構
伺服器程式postmaster
後臺工作程式
後端程式
- 記憶體結構
本地記憶體區
work_mem
maintenance_work_mem
temp_buffers共享記憶體區
shared buffer pool
WAL buffer
commit log
- 資料庫啟動過程
- 資料庫連線過程
PostgreSQL是一個client/server架構rdbms,一個伺服器上執行多個程式。
1、程式結構
Postgres Server Process(postmaster)
--pg的主程式,也是父程式,後端程式和後臺工作程式都是由server process fork派生出來;同時具有監聽的功能Background Processes
--後臺工作程式,實現資料庫的功能及管理
logger process
--日誌收集程式,將日誌資訊輸出到日誌檔案
checkpointer process
--檢查點程式,執行檢查點writer process
--後臺寫程式,將shared buffer中的資料寫入磁碟wal writer process
--後臺wal日誌寫程式,將walbuffer中的日誌流寫入磁碟autovacuum launcher process
--自動清理程式,清理版本資料,向postmaster主程式申請呼叫autovacuum程式archiver process
--歸檔程式,歸檔wal日誌stats collector process
--統計資訊收集進(pg_stat_database、pg_stat_activity)logical replication,wal sender process等其他程式
backed process
--後端程式求,用來處理客戶端連線請服務
pg postgres [local] idle
--本地登陸程式
pg postgres 192.168.6.1(53171) idle
--遠端登陸程式pg postgres 192.168.6.1(51846) idle intransaction
--遠端登陸程式,程式中事務未完成
eg
[root@pg ~]# pstree -ap |grep post |grep -v grep
|-postmaster,889 -D /opt/postgres/data
| |-postmaster,906
| |-postmaster,990
| |-postmaster,991
| |-postmaster,992
| |-postmaster,993
| |-postmaster,994
| |-postmaster,995
| |-postmaster,996
| |-postmaster,1249
| |-postmaster,1301
| `-postmaster,1428`
[root@pg ~]# ps -ef |grep postgres |grep -v grep
pg 889 1 0 09:44 ? 00:00:00 /opt/postgres//bin/postmaster -D /opt/postgres/data
pg 906 889 0 09:44 ? 00:00:00 postgres: logger process
pg 990 889 0 09:44 ? 00:00:00 postgres: checkpointer process
pg 991 889 0 09:44 ? 00:00:00 postgres: writer process
pg 992 889 0 09:44 ? 00:00:00 postgres: wal writer process
pg 993 889 0 09:44 ? 00:00:00 postgres: autovacuum launcher process
pg 994 889 0 09:44 ? 00:00:00 postgres: archiver process
pg 995 889 0 09:44 ? 00:00:00 postgres: stats collector process
pg 996 889 0 09:44 ? 00:00:00 postgres: bgworker: logical replication launcher
pg 1249 889 0 09:51 ? 00:00:00 postgres: pg postgres [local] idle
pg 1301 889 0 10:18 ? 00:00:00 postgres: pg postgres 192.168.6.1(51846) idle in transaction
pg 1428 889 0 11:03 ? 00:00:00 postgres: pg postgres 192.168.6.1(53171) idle
[root@pg ~]#
以上以看出,postmaster fork出其他的程式,其中包括必可須的後臺服務程式和後端程式。
注意:
由於所有程式都是由postmster程式派生出來的,不能對程式進行kill操作,否則會造成postmaster重啟,也就是資料庫重啟
殺死後端程式需要使用函式pg_terminate_backend(apid int)
如:
postgres=# select pg_terminate_backend(1301);
pg_terminate_backend
----------------------
t
(1 row)
postgres=#
2、記憶體結構
-
Local memory area
--每個後端程式自己使用,主要用於查詢
work_mem
--用於存放排序和hash結果maintenance_work_mem
--管理工作使用的記憶體,如VACUUM
temp_buffers
--儲存臨時表
-
Shared memory area
--所有程式共同使用,啟動資料庫後分配的記憶體
shared buffer pool
--存放page,資料庫所有操作都在此記憶體完成WAL buffer
--存放wal日誌流
commit log
--存放事務狀態
記憶體大小有引數控制
postgres=# select name,setting,source from pg_settings where name like '%work_mem%';
name | setting | source
----------------------+---------+---------
autovacuum_work_mem | -1 | default
maintenance_work_mem | 65536 | default
work_mem | 4096 | default
(3 rows)
postgres=# select name,setting,source from pg_settings where name like '%buffer%';
name | setting | source
----------------+---------+--------------------
shared_buffers | 16384 | configuration file
temp_buffers | 1024 | default
wal_buffers | 512 | override
(3 rows)
知道以上記憶體的作用,進行引數調優
3、資料庫啟動過程
start資料庫後,首先啟動Postgres Server Process(postmaster),然後分配共享記憶體,分配記憶體後啟動必須的後臺工作程式,postmaster監聽一個埠,等待客戶端連線請求
4、客戶端連線過程
客戶端程式申請連線資料庫,postmaster監聽連線,通過連線認證後,fork出後臺程式backend process代替客戶端程式運算元據庫
相關文章
- PostgreSQL:記憶體結構SQL記憶體
- Oracle - 資料庫的記憶體結構Oracle資料庫記憶體
- 瀚高資料庫記憶體結構資料庫記憶體
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- 記憶體結構記憶體
- PostgreSQL資料庫管理 第二章體系結構SQL資料庫
- PostgreSQL體系結構概述SQL
- JVM的基本結構和JVM的記憶體結構JVM記憶體
- JVM記憶體結構JVM記憶體
- 結構體記憶體對齊結構體記憶體
- MySQL整體架構與記憶體結構MySql架構記憶體
- JVM記憶體結構、Java記憶體模型和Java物件模型JVM記憶體Java模型物件
- 【JVM】堆體系結構及其記憶體調優JVM記憶體
- C結構體中資料的記憶體對齊問題結構體記憶體
- 達夢資料庫基礎知識(三)達夢資料庫記憶體結構資料庫記憶體
- iOS標準庫中常用資料結構和演算法之記憶體池iOS資料結構演算法記憶體
- 理解JVM(一):記憶體結構JVM記憶體
- JVM(七):JVM記憶體結構JVM記憶體
- JVM記憶體結構劃分JVM記憶體
- 淺談JVM記憶體結構 和 Java記憶體模型 和 Java物件模型JVM記憶體Java模型物件
- STM32記憶體結構介紹和FreeRTOS記憶體分配技巧記憶體
- Oracle 19c資料庫體系結構-2Oracle資料庫
- Oracle 19c資料庫體系結構-1Oracle資料庫
- C++ struct結構體記憶體對齊C++Struct結構體記憶體
- c 結構體記憶體對齊詳解結構體記憶體
- JVM學習(一)——記憶體結構JVM記憶體
- Oracle OCP(39):Database 記憶體結構OracleDatabase記憶體
- JVM之記憶體結構詳解JVM記憶體
- JVM及其記憶體結構劃分JVM記憶體
- 【web】資料庫應用系統設計體系結構Web資料庫
- PostgreSQL-PG體系結構之WAL(五)SQL
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- PostgreSQL-PG的體系架構之記憶體管理(三)SQL架構記憶體
- PostgreSQL:程式結構SQL
- Hotspot VM 執行時資料區記憶體結構劃分HotSpot記憶體
- Redis 雜湊結構記憶體模型剖析Redis記憶體模型
- 結構體資訊寫入SD卡,記憶體不連續結構體SD卡記憶體
- MySQL探祕(三):InnoDB的記憶體結構和特性MySql記憶體