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