簡述PostgreSQL存儲體系 小塊頭也有大優(yōu)點
作為一款優(yōu)秀的開源數(shù)據(jù)庫軟件,PostgreSQL非常值得深入學習一下。先總結一下PostgreSQL數(shù)據(jù)庫的存儲體系結構。
傳統(tǒng)的關系型數(shù)據(jù)庫的存儲結構多采用表空間的管理方式,其中涉及到extent,segment,page,file等存儲概念。
表空間的管理方式通常有SMS,DMS兩種策略,PostgreSQL在改進之后也支持了DMS方式。在oracle,DB 2中很早就支持了DMS了,在使用Oracle的工作過程了對其有了全面了解。DMS不論在OLAP還是OLTP系統(tǒng)中都比SMS的性能有不小的提升,隨著OLTP規(guī)模不斷增大的情況下兩者之間的差距顯現(xiàn)不大。
在這里只總結一下PostgreSQL的DMS管理方式。
數(shù)據(jù)文件
PostgreSQL的文件管理方式與Oracle的非常相似,每個數(shù)據(jù)文件的***塊存儲文件頭信息,第二個塊存儲文件頭的6個文件位圖頁的日志情況,算起來是從第七個塊真正的開始。PostgreSQL的文件頭中的位圖頁表示的是區(qū)(extent)的存儲情況,而oracle表示的是塊的分配情況;PostgreSQL的每個區(qū)固定有16個塊,Oracle更靈活一些。
區(qū)
區(qū)的概念與Oracle相同,連續(xù)的若干塊組成了區(qū),在PostgreSQL中區(qū)中的塊數(shù)是固定值16。
段
PostgreSQL因為沒有undo段,只存在數(shù)據(jù)段與索引段兩種,實質只是段結構不同。PostgreSQL的數(shù)據(jù)段與Oracle相同,采用了自動段空間的管理方式:
1,每個段有一個段頭頁,也是段的***個頁;
2,每個段中每個區(qū)的***頁稱為一級位圖頁;
3,每個段中***區(qū)的第二個頁稱為二級位圖頁,其管理著512個一級位圖頁位置與得使用情況,每個段存在1016個二級位圖頁;
計算:
512個一級位圖頁/二級位圖頁*1016個二級位圖頁/段=520192個一級位圖頁。
每個區(qū)只有一個一級位圖頁,就是說每個段共有520192個區(qū)。
520192區(qū)/段*16塊/區(qū)*8K/塊=63.5GB
文件
文件的分配方式實際有表空間所采用的區(qū)分配方式?jīng)Q定。
分配新區(qū):首先通過參數(shù)值used_size判斷剩余空間是否足夠16個塊,初始化該區(qū)的一級位圖頁,修改二級位圖頁,更新段頭頁與文件頭信息。
PostgreSQL的存儲策略大致如上,更深入的去學習其存儲策略對數(shù)據(jù)庫的維護與性能優(yōu)化等方面都會帶來更大的幫助。
原文標題:postgresql存儲
鏈接:http://www.cnblogs.com/daduxiong/archive/2010/08/10/1796770.html
【編輯推薦】