【PG體系結構】PG體系結構簡單說明

xysoul_雲龍發表於2019-01-07
##pg 結構
--邏輯結構
--資料庫例項通常指資料庫集簇(database cluster),單個例項管理資料庫集合
--一個資料庫集簇包含使用者、資料庫,可為每個資料庫指定單獨的使用者,每個資料庫下面包含schemas(名稱空間),預設為public,每個schemas下面包含表、索引、檢視、序列等。
--物理結構
--資料檔案、引數檔案、控制檔案、資料庫執行日誌及預寫日誌
--可通過以下命令檢視目錄檔案,具體作用可參考《Postgresql實戰》98頁
tree -L 1 -d /pgdata/10/data
--控制檔案位置
[postgres@pgtest global]$ pwd
/pgdata/data/global
[postgres@pgtest global]$ ls -l pg_control 
-rw------- 1 postgres postgres 8192 Dec  7 04:56 pg_control
--資料檔案佈局
--oid,所有資料庫物件都有各自的物件識別符號(oid)進行內部管理,它們是無符號的4位元組整數,例如
select oid,datname from pg_database;
select oid,relname,relkind from pg_class;
--表空間,最大的邏輯儲存單位
--預設兩個表空間,pg_global表空間,目錄為global,儲存系統表;pg_default表空間的物理檔案位置在base目錄,是template0和template1資料庫的預設表空間,
--建立表空間需要先建立目錄,表空間可以解決以後磁碟空不足問題、分配效能不同的磁碟上,提高資料庫效能
mkdir -p /pgdata/10/mytblspc
create tablespace myspc location '/pgdata/10/mytblspc';
create table t(id int4) tablespace myspc;
--資料檔案命名,對於表大小超出1g,pg會自動切分多個檔案,oid.順序號,真正管理表檔案的是pg_class的relfilenode
--檢視錶的大小
select pg_size_pretty(pg_relation_size('tb1'::regclass));
--表檔案內部結構
--pg中,儲存在磁碟中的塊稱為Page,記憶體中的塊稱為Buffer,表和索引稱為Relation,行稱為Tuple。資料讀寫以Page為最小單位,Page預設8KB
##程式結構
--守護程式與服務程式
--postmaster程式主要職責
資料庫的啟停
監聽客戶端連線
為每個客戶端連線fork單獨的postgres服務程式
當服務程式出錯時進行修復
管理資料檔案
管理與資料庫執行相關的輔助程式
--輔助程式
background writer:bgwriter程式,搜尋共享緩衝池找到被修改的頁,並將它們從共享緩衝池刷出
autovacuum launcher: 自動清理回收垃圾程式
WAL writer: 定期將WAL緩衝區上的WAL資料寫入磁碟
statistics collector: 統計資訊收集程式
logging collector: 日誌程式,將訊息或者錯誤資訊寫入日誌
archiver:WAL歸檔程式
checkpointer:檢查點程式
##記憶體結構
--本地記憶體主要給後端程式使用,主要三部分
work_mem: 當使用order by 或distinct會使用到
maintenance_work_mem: 維護操作,例如VACUUM REINDEX CREATE INDEX等操作
temp_buffers: 臨時表相關操作使用
--共享記憶體,在伺服器啟動時分配,由所有後端程式共同使用
shared buffer pool :PostgreSQL將表和索引頁面從持久儲存裝載到這裡,並直接操作它們
WAL buffer: WAL檔案持久化之前的緩衝區
CommitLog buffer:PostgreSQL 在Commit Log中儲存事務的狀態,並將這些狀態保留在共享記憶體緩衝區中,在整個事務處理過程中使用

【PG體系結構】PG體系結構簡單說明

【PG體系結構】PG體系結構簡單說明


database cluster--user、【database】--schema--table、index、view……

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-2374750/,如需轉載,請註明出處,否則將追究法律責任。

相關文章