PostgreSQL中page頁結構源碼解析
PostgreSQL中page頁結構源碼解析
在PG中,磁碟儲存和記憶體中的最小管理單位都是page,也是通常所說的block。一般PG頁的大小為8K,在源碼編譯時間可以設定。此後都不可更改,因為許多PG記憶體結構設計都是以此為基礎的。
在一個page中,表的記錄是從page的底部開始儲存,然後慢慢向上漲。Page結構圖如下:
為一個page的結構,主要由5個部分組成:
Page Header:為頁頭,主要儲存LSN,page中空閑空間的開始offset和結束offset等。下面再展開講。
ItemId data:是page中表記錄的索引條目。一個索引條目4個位元組,由兩部分組成:此記錄在page中的offset和記錄長度length。
Free space:是此page中剩餘可用的空間,不算標記為delete後的空間;是指完全沒有被使用的空間,也相當於page中沒有被分配的空間。
Item:就是指表實際儲存的記錄。
Special space: 儲存索引存取方法(AM: Access Method)資訊,不同的索引存取方法,內容不一樣。但如果是表的page,那麼這裡是空的,沒有任何資訊。
源碼在src/backend/storage/page/bufpage.c中,以下為Page的初始化:
Page header 24個位元組說明如下:
PageHeader 源碼定義如下:
其中,PageXLogRecPtr為一個結構體,64位。記錄xlog資訊的原因:
保證buffer manger WAL原則,即寫日誌先於寫資料
髒塊checkpoint時,日誌先刷出到disk
總的來講,PG中頁的結構大體上Oracle的Block結構是比較類似的,都是採用向上漲的方式來儲存記錄。但是在小細節上還是分別比較大的。Oracle的Block中還有ITL等事務相關資訊等。
------------------------------------華麗麗的分割線------------------------------------
CentOS 6.3環境下yum安裝PostgreSQL 9.3
PostgreSQL緩衝詳述
Windows平台編譯 PostgreSQL
Ubuntu下LAPP(Linux+Apache+PostgreSQL+PHP)環境的配置與安裝
Ubuntu上的phppgAdmin安裝及配置
CentOS平台下安裝PostgreSQL9.3
PostgreSQL配置Streaming Replication叢集
如何在CentOS 7/6.5/6.4 下安裝PostgreSQL 9.3 與 phpPgAdmin
------------------------------------華麗麗的分割線------------------------------------
PostgreSQL 的詳細介紹:請點這裡
PostgreSQL 的:請點這裡
本文永久更新連結地址: