PostgreSQL的表檔案以及TOAST表檔案對應關係
一、表和表檔案對應關係
表和索引屬於資料庫物件,在pg_calss裡都有相應的oid與之對應。
每個表都有與之相關的兩個關聯檔案,為_fsm和_vm,是空閒空間對映和可見性對映檔案。表的三個檔案也被稱為相應關係的分支(fork),空閒空間對映是表或者資料檔案的第一個分支(分支編號為1),可見性對映是資料檔案的第二個分支(分支編號為2),資料檔案的分支標編號為0。
表或索引物件被建立後會生成以relfilenode編號命名的資料檔案。該檔案有1G的大小限制,超過1G或生成新的檔案(檔名後邊加數字編號):PostgreSQL會建立並使用一個名為relfilenode.1的新檔案,如果新檔案也滿了,則會建立下一個名為relfilenode.2的新檔案,以此類推。實際上,1GB只是預設的段尺寸。段尺寸可以在編譯PostgreSQL時使用配置選項–with-segsize進行調整。
表和索引的relfilenode值會被一些命令(例如truncate,reindex,cluster)所改變,執行truncate後,會為表分配一個新的relfilenode,刪除舊的資料檔案,並建立一個新的資料檔案。如例子所示,65571是原本的表檔案,65574是新的表檔案,但truncate之後表的oid是不會發生變化的。
在9.0或者更高的版本,用函式pg_relation_filepath能根據oid或者名稱返回關係對應的檔案路徑
使用方法圖中也有演示:
select pg_relation_filepath('表名');
二、表和TOAST表檔案對應關係
TOAST是“The Oversized-Attribute Storage Technique”的縮寫,主要用於儲存一個大欄位的值。在PG中,頁是資料在檔案儲存中的基本單位,其大小是固定的且只能在編譯期指定,之後無法修改,預設的大小為8KB。對於很長的行資料,PG就會啟動TOAST,具體就是採用壓縮和切片的方式。實際資料儲存在另一張系統表的多個行中,這張表就叫TOAST表,這種儲存方式叫行外儲存。
在PG中每個表欄位有四種TOAST的策略,可以參考
如圖是一張測試表,interger預設TOAST策略為plain,而text為extended。如果表中有欄位需要TOAST,那麼系統會自動建立一張TOAST表負責行外儲存。(請注意表結構中的oid列無特殊含義,是以前測試所建立的一個列名)
通過pg_class可以看到tab_ysl這張表的oid為41073,其對應TOAST表的oid為41076
則對應的TOAST表為pg_toast.pg_toast_41073(注意TOAST表不在當前schema下,在pg_toast的模式下,以pg_開頭的模式名都是保留給系統使用的)
可以看到表的實際兩個檔案都存在
插入測試資料進行測試,可以看到插入一條如圖資料時,TOAST表裡並無記錄。因為name列只有10個字元,所以沒有壓縮,也沒有行外儲存。
繼續進行測試,每次把name列的長度增長一倍,一直迴圈更新,直到TOAST表裡有記錄。
此時可以看到,name的長度為327680,超過了8k的頁面大小,TOAST表裡的兩條記錄長度都是略小於2K,這是因為text型別的extended策略下,先啟用了壓縮,然後才使用行外儲存。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69990629/viewspace-2854909/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Hibernate中實體類對映檔案表與表的關係模版
- 檔案描述符、開啟檔案表以及inode
- 日誌檔案和歸檔日誌檔案的關係以及如何切換日誌
- sqlserver關於filestream檔案流、filetable檔案表的總結SQLServer
- 表的schema 檔案
- 如何理解postgresql toast表SQLAST
- 一張C/C++檔案io相關函式mode對應表C++函式
- Hibernate對映檔案一對多關係薦
- PostgreSQL 物理檔案對映解析SQL
- PostgreSQL在不同的表空間移動資料檔案SQL
- RMAN備份中檔案與channel對應關係的格式問題
- drop表空間以及對應的資料檔案後空間不釋放的問題
- 移動資料檔案、系統表空間檔案、臨時表空間檔案
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- TOM關於變異表的解決檔案
- 裸裝置表空間對映檔案
- 表空間資料檔案建立大小與實際使用大小以及rman備份集的關係系列一
- 大檔案表空間
- js表單檔案提交JS
- archive log檔案大小與redo log檔案大小關係探究Hive
- 表空間&資料檔案和控制檔案(zt)
- mysql基礎學習之一之建立表所對應的的檔案MySql
- Laravel從已有資料庫表生成對應的migration和seed檔案Laravel資料庫
- RMAN恢復表空間,資料檔案,歸檔檔案,控制檔案等介紹
- ajax提交表單包括檔案
- Oracle 表空間增加檔案Oracle
- postgresql psqlrc 檔案SQL
- MySQL innodb表使用表空間物理檔案複製表MySql
- 表`t`的INODE結構檔案分析
- 刪除表空間和表空間包含的檔案
- Linux Shell檔案之間的包含關係Linux
- 檔案系統和邏輯卷的關係
- post 表單大檔案上傳
- 修改表空間檔案路徑
- 使用外部表讀日誌檔案
- smali檔案對比java檔案Java
- HDFS讀檔案過程分析:獲取檔案對應的Block列表BloC
- internet選項 對應的檔案