作為一款優秀的開來源資料庫軟體,PostgreSQL非常值得深入學習一下。先總結一下PostgreSQL資料庫的儲存體繫結構。
傳統的關係型資料庫的儲存結構多採用資料表空間的管理方式,其中涉及到extent,segment,page,file等儲存概念。
資料表空間的管理方式通常有SMS,DMS兩種策略,PostgreSQL在改進之後也支援了DMS方式。在oracle,DB 2中很早就支援了DMS了,在使用Oracle的工作過程了對其有了全面瞭解。DMS不論在OLAP還是OLTP系統中都比SMS的效能有不小的提升,隨著OLTP規模不斷增大的情況下兩者之間的差距顯現不大。
在這裡只總結一下PostgreSQL的DMS管理方式。
資料檔案
PostgreSQL的檔案管理方式與Oracle的非常相似,每個資料檔案的第一Block Storage檔案頭資訊,第二個Block Storage檔案頭的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