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中實體類對映檔案表與表的關係模版
- sqlserver關於filestream檔案流、filetable檔案表的總結SQLServer
- 表的schema 檔案
- 一張C/C++檔案io相關函式mode對應表C++函式
- 如何理解postgresql toast表SQLAST
- 新建的表空間(或資料檔案)丟失以及控制檔案丟失,有新建表空間(或資料檔案)前的控制文
- PostgreSQL在不同的表空間移動資料檔案SQL
- js表單檔案提交JS
- Laravel從已有資料庫表生成對應的migration和seed檔案Laravel資料庫
- HBase 的結構與表的對應關係
- Linux Shell檔案之間的包含關係Linux
- [20190410]dg建立臨時表檔案資料檔案.txt
- Oracle 表空間增加檔案Oracle
- internet選項 對應的檔案
- 表`t`的INODE結構檔案分析
- MySQL innodb表使用表空間物理檔案複製表MySql
- 比對檔案sam檔案的解讀
- post 表單大檔案上傳
- SQLite 刪表後刪物理檔案SQLite
- 表空間和資料檔案的管理
- 表`t`的XDES Entry結構檔案分析
- 關於丟失表空間資料檔案的處理方式
- gcc 標頭檔案依賴關係 分析工具GC
- Java 根據模板生成 PDF 檔案 以及 excel 檔案JavaExcel
- MySQL 系統表空間檔案解析MySql
- 多個excel檔案合併到一個檔案中的多個sheet表中Excel
- (7)caffe總結之Blob,Layer and Net以及對應配置檔案的編寫
- PostgreSQL資料庫toast表損壞解決SQL資料庫AST
- 表的關聯關係
- python對檔案的操作Python
- java檔案相關(檔案追加內容、檔案內容清空、檔案內容讀取)Java
- .ts檔案和d.ts檔案對比
- 建立遷移檔案 auth 認證表 users
- 報表如何批次匯出成 excel 檔案Excel
- Hive表小檔案合併方法總結Hive
- iMazing檔案系統檢視一覽表
- FastAPI基礎之 表單和檔案操作ASTAPI
- 使用ISE軟體製作網表檔案