PostgreSQL體系結構概述
PostgreSQL的物理架構由 共享記憶體、一系列後臺程式和資料檔案組成
一、共享記憶體
共享記憶體是伺服器為資料庫快取和事務日誌快取預留的記憶體快取空間
Shared Memory=Shared Buffer + WAL Buffer
Shared Buffer的目的是減少磁碟IO ,為了達到這個目的,必須滿足以下規則: 當需要快速訪問非常大的快取時(10G、100G等) 如果有很多使用者同時使用快取,需要將內容儘量縮小 頻繁訪問的磁碟塊必須長期放在快取中
WAL Buffer是用來 臨時儲存資料庫變化的 快取區域。儲存在WAL Buffer中的內容會根據提前定義好的時間點引數要求 寫入到磁碟的WAL檔案中。
在備份和恢復的場景下,WAL Buffer和WAL檔案是極其重要的。
二、程式
##PostgreSQL有四種程式型別 Postmaster (Daemon) Process(主後臺駐留程式) Background Process(後臺程式) Backend Process(後端程式) Client Process(客戶端程式)
1.Postmaster (Daemon) Process(主後臺駐留程式)
主後臺駐留程式是PostgreSQL啟動時第一個啟動的程式。啟動時,他會執行恢復、初始化共享記憶體愛你的執行後臺程式操作。
正常執行期間,當有客戶端發起連結請求時,它還負責建立後端程式。
pstree -p pid 命令檢視程式之間的關係,你會發現Postmaster程式是其他所有程式的父程式
2.Background Process(後臺程式)
logger 將錯誤資訊寫到log日誌中
checkpointer 當檢查點出現時,將髒記憶體塊寫到資料檔案
writer 資料檔案寫程式,週期性的將髒記憶體塊寫入檔案
wal writer wal寫程式,將WAL快取寫入WAL檔案
Autovacuum launcher 當自動vacuum被啟用時,用來派生autovacuum工作程式。autovacuum程式的作用是在需要時自動對膨脹表執行vacuum操作。
archiver 在歸檔模式下時,複製WAL檔案到特定的路徑下。
stats collector 用來收集資料庫統計資訊,例如會話執行資訊統計(使用pg_stat_activity檢視)和表使用資訊統計(pg_stat_all_tables檢視)
3.Backend Process(後端程式)
後端程式用於處理前端使用者請求並返回結果。查詢執行時需要一些記憶體結構,就是所謂的本地記憶體(local memory)。
本地記憶體涉及的主要引數有: work_mem:用於排序、點陣圖索引、雜湊連結和合並連結操作。預設值為4MB。 maintenance_work_mem:用於vacuum和建立索引操作。預設值為64MB。 temp_buffers:用於臨時表。預設值為8MB。
4.Client Process(客戶端程式)
客戶端程式需要和後端程式配合使用,處理每一個客戶連結
三、資料分佈及檔案
資料庫
當initdb()命令執行後,template0 , template1 , 和postgres資料庫被建立。
template0和template1資料庫是建立使用者資料庫時使用的模版資料庫,他們包含系統後設資料表。
initdb()剛完成後,template0和template1資料庫中的表是一樣的。但是template1資料庫可以根據使用者需要建立物件。
使用者資料庫是透過克隆template1資料庫來建立的;
表空間
initdb()後馬上建立pg_default和pg_global表空間。
建表時如果沒有指定特定的表空間,表預設被存在pg_default表空間中。
用於管理整個資料庫叢集的表預設被儲存在pg_global表空間中。
pg_default表空間的物理位置為$PGDATA\base目錄。
pg_global表空間的物理位置為$PGDATA\global目錄。
一個表空間可以被多個資料庫同時使用。此時,每一個資料庫都會在表空間路徑下建立為一個新的子路徑。
建立一個使用者表空間會在$PGDATA\pg_tblspc目錄下面建立一個軟連線,連線到表空間制定的目錄位置
表
每個表有三個資料檔案。
一個檔案用於儲存資料,檔名是表的OID。
一個檔案用於管理表的空閒空間,檔名是OID_fsm。
一個檔案用於管理表的塊是否可見,檔名是OID_vm。
索引沒有_vm檔案,只有OID和OID_fsm兩個檔案
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2843840/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 2 多租戶體系結構概述
- C 結構體概述結構體
- Postgresql資料庫體系結構-程式和記憶體結構SQL資料庫記憶體
- Spring Security系列之體系結構概述(一)Spring
- Oracle體系結構概述與SQL解析剖析OracleSQL
- PostgreSQL-PG體系結構之WAL(五)SQL
- PostgreSQL:記憶體結構SQL記憶體
- 【PG體系結構】Postgresql 配置檔案詳解SQL
- 2. Overview of the Multitenant Architecture(多租戶體系結構概述)ViewNaN
- PostgreSQL資料庫管理 第二章體系結構SQL資料庫
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- PostgreSQL:物理結構SQL
- PostgreSQL:程式結構SQL
- java Servlet結構概述JavaServlet
- XML 樹結構概述XML
- 【PG體系結構】PG體系結構簡單說明
- MySQL 體系結構MySql
- 【JVM體系結構】JVM
- BeanFactory體系結構Bean
- MongoDB 體系結構MongoDB
- Servlet 體系結構Servlet
- PostgreSQL:邏輯結構SQL
- PostgreSQL 目錄結構SQL
- MySQL底層概述—1.InnoDB記憶體結構MySql記憶體
- 3:Oracle體系結構(邏輯結構)Oracle
- HDFS的體系結構
- MySQL 一 體系結構MySql
- oracle體系結構(轉)Oracle
- 1、JVM體系結構JVM
- 指令集體系結構_計算機體系結構:指令程式碼計算機
- 軟體體系結構評估
- 作業系統體系結構作業系統
- 資料結構筆記——概述資料結構筆記
- 資料結構小白系列之資料結構概述資料結構
- 集合框架體系概述框架
- 【JVM】JVM 概述、記憶體結構、溢位、調優(基礎結構+StringTable+Unsafe+ByteBuffer)JVM記憶體
- PostgreSQL-PG的體系架構之記憶體管理(三)SQL架構記憶體
- 【Oracle體系結構】 Oracle19C 系統結構介紹Oracle