PostgreSQL儲存引擎之heap tuple結構
struct HeapTupleHeaderData { union { HeapTupleFields t_heap; DatumTupleFields t_datum; }t_choice; ItemPointerData t_ctid;//block號及item號 uint16 t_infomask2; /* number of attributes + various flags */ uint16 t_infomask; /* various flag bits, see below */ uint8 t_hoff; /* sizeof header incl. bitmap, padding */ bits8 t_bits[FLEXIBLE_ARRAY_MEMBER]; /* bitmap of NULLs */ };
欄位說明:
1、t_choice是具有兩個成員的聯合型別:
t_heap:用於記錄對元組執行插入/刪除操作的事務ID和命令ID,這些資訊主要用於併發控制時檢查元組對事務的可見性。
t_datum:當一個新元組在記憶體中形成的時候,我們並不關心其事務可見性,因此在t_choice中只需用DatumTupleFields結構來記錄元組的長度等資訊。但在把該元組插入到表檔案時,需要在元組頭資訊中記錄插入該元組的事務和命令ID,故此時會把t_choice所佔用的記憶體轉換為HeapTupleFields結構並填充相應資料後再進行元組的插入。
2、t_ctid用於記錄當前元組或者新元組的物理位置(block號及塊內偏移量),若元組被更新(PostgreSQL對元組的更新採用的是標記刪除舊版本元組並插入新版本元組的方式),則記錄的是新版本元組的物理位置。PostgreSQL中對於元組採用多版本技術儲存,對元組的每個更新操作都會產生一個新版本,版本之間從老到新形成一條版本鏈(將舊版本的t_ctid欄位指向下一個版本的位置即可)。
3、t_infomask2使用其低11位表示當前元組的屬性個數,其他位則用於包括用於HOT技術及元組可見性的標誌位。
4、t_infomask用於標識元組當前的狀態,比如元組是否具有OID、是否有空屬性等,t_infomask的每一位對應不同的狀態,共16種狀態。
5、t_hoff表示該元組頭的大小。
6、_bits[]陣列用於標識該元組哪些欄位為空。
/* * information stored in t_infomask: */ #define HEAP_HASNULL 0x0001 /* has null attribute(s) */ #define HEAP_HASVARWIDTH 0x0002 /* has variable-width attribute(s) */ #define HEAP_HASEXTERNAL 0x0004 /* has external stored attribute(s) */ #define HEAP_HASOID 0x0008 /* has an object-id field */ #define HEAP_XMAX_KEYSHR_LOCK 0x0010 /* xmax is a key-shared locker */ #define HEAP_COMBOCID 0x0020 /* t_cid is a combo cid */ #define HEAP_XMAX_EXCL_LOCK 0x0040 /* xmax is exclusive locker */ #define HEAP_XMAX_LOCK_ONLY 0x0080 /* xmax, if valid, is only a locker */
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31493717/viewspace-2220463/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- PostgreSQL儲存引擎之page結構SQL儲存引擎
- PostgreSQL DBA(21) - MVCC#1(Multi Version Heap Tuple)SQLMVCC#
- MySQLInnoDB儲存引擎(一):精談innodb的儲存結構MySql儲存引擎
- MyRocks儲存引擎資料結構解析儲存引擎資料結構
- MySQL體系結構與儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎體系結構MySql儲存引擎
- PostgreSQL 資料庫學習 - 1.資料庫體系結構之儲存結構SQL資料庫
- 資料結構之堆(Heap)資料結構
- MySQL之四 儲存引擎MySql儲存引擎
- PostgreSQL Page頁結構解析(5)- B-Tree索引儲存結構#1SQL索引
- PostgreSQL Page頁結構解析(6)- B-Tree索引儲存結構#2SQL索引
- PostgreSQL Page頁結構解析(7)- B-Tree索引儲存結構#3SQL索引
- 儲存結構
- Sqlserver儲存引擎體系結構簡介_Part1SQLServer儲存引擎
- JanusGraph -- 儲存結構
- CentOS 儲存結構CentOS
- 儲存引擎儲存引擎
- 線性表之順序儲存結構
- 線性表之鏈式儲存結構
- 《MySQL 基礎篇》十二:InnoDB 儲存引擎的資料結構MySql儲存引擎資料結構
- 第一章 MySQL體系結構和儲存引擎MySql儲存引擎
- Mysql之儲存引擎及字符集MySql儲存引擎
- 《MySQL 效能優化》之 InnoDB 儲存引擎MySql優化儲存引擎
- MySQL 儲存引擎MySql儲存引擎
- bitcask儲存引擎儲存引擎
- MySQL儲存引擎MySql儲存引擎
- 資料結構 - 堆(Heap)資料結構
- MySQL索引及優化(1)儲存引擎和底層資料結構MySql索引優化儲存引擎資料結構
- mysql儲存引擎InnoDB詳解,從底層看清InnoDB資料結構MySql儲存引擎資料結構
- 為什麼選擇b+樹作為儲存引擎索引結構儲存引擎索引
- 資料庫表設計之儲存引擎資料庫儲存引擎
- InnoDB記錄儲存結構
- php圖的儲存結構PHP
- redis 儲存結構原理 2Redis
- HBase 資料儲存結構
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- MySQL系列-儲存引擎MySql儲存引擎
- MySQL InnoDB儲存引擎MySql儲存引擎