PostgreSQL 物理檔案對映解析
我們知道,在PG中,每個relation,也就是表,都有好幾個fork對應。存放主表資料的為“MAIN” fork;管理空餘空間的為“FSM” fork;存放視覺化檢視的為“visibility” fork。
那麼PG又是如何將每個表的fork管理起來,並跟pg_class中的relfileno對應起來的呢?這可以分為兩類:一類是常規表;一類是系統表。
1.常規表
假設我有一張表叫”tab_mvcc_test”,它在postgres資料庫中。因此我們得先找到資料庫目錄。查pg_database,得到oid為“12896”。
接著去base目錄下,找到相應的資料庫目錄。“12896”目錄就是我們想要的。
然後從pg_class中,我們查到”tab_mvcc_test”的relfilenode為“16483”。
接著我們進入資料庫目錄“12896”,然後list一把,提到以下相關的三個檔案。以“_fsm”字尾的就是Free Space Mapping檔案。以”vm”字尾的就是visibility map。
而沒有字尾的那個就是我們的主表資料檔案,裡面還存放了索引資料。
2.系統表
另外像系統的catalog表,如pg_class,它的refileno是”0“,又是什麼原因呢?PG對於系統表處理,不能像常規表一樣。這就有點類似於”雞生蛋,還是蛋生雞“。因為系統表是來管理常規表的。
PG對於這些catalog表,放到一個檔案中去管理,將oid與relfileno做對映。這個檔案就是著名的”pg_filenode.map“。這個檔案的大小為512,剛好是一個OS disk sector的大小。
PG做了對齊處理,在原始碼上用RelMapFile結構體與之對應。結構體大小為:62*8+4*4=496+16=512。也就是說這個檔案最多存放62條系統catalog表的記錄。
由於這個檔案的重要性,剛好與disk sector大小對齊,減少檔案crash的機率。
我們接下來把pg_filenode.map DUMP出來看一下,裡面是什麼資料:
第一個圈中的資料為PG檔案頭的魔法資料字,那麼第二個圈中的,到底對應的是哪個catalog表呢?我們可以計算下:“4eb”對應十進位制資料就是”1259“,剛好是pg_class的oid。
而後面的”3172”對應的就是12658。剛好是relfilenode。完美的對應了起來。
再得到檔案如下:
記錄數剛好14,跟上面圖中兩個紅色圈之間的數字”000e“對起來。這個檔案還存放了這些系統表對應的索引檔案filenode。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30088583/viewspace-1633683/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mybatis原始碼配置檔案解析之五:解析mappers標籤(解析XML對映檔案)MyBatis原始碼APPXML
- MySQL8.0新特性:增加系統檔案追蹤spaceID和物理檔案的對映MySql
- Mybatis對映檔案簡介MyBatis
- 載入Mapper對映檔案APP
- nginx容器卷對映檔案不生效Nginx
- 使用記憶體對映檔案(mmap)記憶體
- Hibernate對映檔案一對多關係薦
- 裸裝置表空間對映檔案
- C#記憶體對映大檔案並使用Marshal解析結構體資訊C#記憶體結構體
- Database 物理檔案Database
- 記憶體對映檔案詳解-----C++實現(即一塊記憶體和一個檔案相對映對應)記憶體C++
- Ubuntu下修改hosts檔案中的域名對映Ubuntu
- Hibernate配置檔案中對映元素詳解
- MyBaits | 對映檔案之引數處理AI
- MyBatis系列之對映檔案中的ResultMapsMyBatis
- VC++中用記憶體對映檔案 (轉)C++記憶體
- 二進位制檔案記憶體對映記憶體
- PostgreSQL的表檔案以及TOAST表檔案對應關係SQLAST
- mysql物理檔案 02MySql
- windows核心程式設計--記憶體對映檔案Windows程式設計記憶體
- Python mmap的使用-檔案記憶體對映Python記憶體
- 居然這就是C++記憶體對映檔案?!C++記憶體
- Android入門教程 | mmap 檔案對映介紹Android
- Middlegen生成Hibernate對映檔案時出錯
- PostgreSQL:物理結構SQL
- Java中的獲取檔案的物理絕對路徑,和讀取檔案Java
- 非同步日誌 vs. 記憶體對映檔案非同步記憶體
- jQuery對xml檔案的解析例項jQueryXML
- postgresql psqlrc 檔案SQL
- Mybatis配置檔案resultMap對映啥時候可寫可不寫?MyBatis
- MyBatis學習 之 二、SQL語句對映檔案(1)resultMapMyBatisSQL
- 一個記憶體檔案對映使用者類 (轉)記憶體
- Mybatis的Mapper對映檔案中常用標籤及作用MyBatisAPP
- Mybatis基礎:Mybatis對映配置檔案,Mybatis核心配置檔案,Mybatis傳統方式開發MyBatis
- PostgreSQL資料檔案災難恢復-解析與資料dumpSQL
- DM7使用DMRMAN對資料庫執行指定對映檔案還原資料庫
- Java記憶體對映,上G大檔案輕鬆處理Java記憶體
- 溫故之.NET程式間通訊——記憶體對映檔案記憶體