成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

PostgreSQL核心揭秘—元組結(jié)構(gòu)

數(shù)據(jù)庫 PostgreSQL
HeapTupleHeaderData 是元組頭部的數(shù)據(jù)結(jié)構(gòu),它包含了關(guān)于該元組的一些關(guān)鍵信息。這些信息包括事務(wù)相關(guān)的數(shù)據(jù)和一些標(biāo)志位,用于多版本并發(fā)控制(MVCC)。

概述

在PostgreSQL中,堆元組(Heap Tuple)是表中一行數(shù)據(jù)的內(nèi)部表示。每個堆元組都存儲在一個頁面(通常為8KB)內(nèi),并且由三個主要部分組成:HeapTupleHeaderData 結(jié)構(gòu)、空值位圖以及用戶數(shù)據(jù)。

詳細(xì)介紹

1. HeapTupleHeaderData 結(jié)構(gòu)

HeapTupleHeaderData 是元組頭部的數(shù)據(jù)結(jié)構(gòu),它包含了關(guān)于該元組的一些關(guān)鍵信息。這些信息包括事務(wù)相關(guān)的數(shù)據(jù)和一些標(biāo)志位,用于多版本并發(fā)控制(MVCC)。

以下是其主要字段:

類型

長度

描述

t_xmin

交易 ID

4 字節(jié)

插入 XID 圖章

t_xmax

交易 ID

4 字節(jié)

刪除 XID 圖章

t_cid

CommandId

4 字節(jié)

插入和/或刪除 CID 圖章(與 t_xvac 疊加)

t_xvac

交易 ID

4 字節(jié)

XID 用于 VACUUM 操作移動行版本

t_ctid

ItemPointerData (項目指針數(shù)據(jù))

6 字節(jié)

此行版本或更新行版本的當(dāng)前 TID

t_infomask2

uint16

2 字節(jié)

屬性數(shù)量,以及各種標(biāo)志位

t_infomask

uint16

2 字節(jié)

各種標(biāo)志位

t_hoff

uint8

1 字節(jié)

用戶數(shù)據(jù)的偏移量

2. 空值位圖(Null Bitmap)

空值位圖是一個可選的部分,僅當(dāng)表中有允許NULL值的列時存在。這個位圖用來標(biāo)記哪些列的值是NULL。每個位對應(yīng)一個列,如果某一位被設(shè)置,則表示相應(yīng)的列是NULL。

3. 用戶數(shù)據(jù)(User Data)

用戶數(shù)據(jù)部分包含實際的字段值。這些值按照表定義中列的順序排列。對于固定長度的數(shù)據(jù)類型(如int4),直接存儲在用戶數(shù)據(jù)部分;對于可變長度的數(shù)據(jù)類型(如text、varchar),則會有一個長度前綴,隨后是實際的數(shù)據(jù)。

圖片

元組增、刪、改操作介紹

1. 增(INSERT)操作

圖片


假設(shè)元組是由 txid=99 的事務(wù)插入頁面中的,這時被插入元組的首部字段設(shè)置如下:

Tuple:

  • t_xmin:設(shè)置為 99,因為此元組由 txid=99 的事務(wù)所插入。
  • t_xmax:設(shè)置為 0,因為此元組尚未被刪除或更新。
  • t_cid:設(shè)置為 0,因為此元組是由 txid=99 的事務(wù)所執(zhí)行的第一條命令插入的。
  • t_ctid:設(shè)置為 (0,1),指向自身,因為這是該元組的最新版本。

2. 刪(DELETE)操作

圖片圖片

假設(shè)接下來事務(wù) txid=100 對元組進(jìn)行了刪除操作。此時,刪除操作會設(shè)置如下:

Tuple(刪除后狀態(tài)):

  • t_xmin:保持為 99,表示該元組的插入事務(wù)。
  • t_xmax:設(shè)置為 100,因為此元組現(xiàn)在被 txid=100 的事務(wù)刪除。
  • t_cid:設(shè)置為 0,因為刪除操作是由 txid=100 事務(wù)的第一條命令執(zhí)行的。
  • t_ctid:保持為 (0,1),仍指向原元組。

死元組最終將從頁面中被移除。清除死元組的過程被稱為清理(VACUUM)過程

3. 改(UPDATE)操作

圖片


如果在 txid=101 的事務(wù)中,對該元組進(jìn)行了更新操作。此時,更新操作會創(chuàng)建一個新的元組,且原元組保持不變。新元組的設(shè)置如下:

當(dāng)執(zhí)行第一條UPDATE命令時,Tuple_1的t_xmax被設(shè)為txid 100,在邏輯上被刪除,然后Tuple_2被插入,接下來重寫Tuple_1的t_ctid以指向Tuple_2。Tuple_1和Tuple_2的頭部字段設(shè)置如下。

第一條 UPDATE 命令

邏輯刪除 Tuple_1:

  • Tuple_1 的 t_xmax 被設(shè)置為 100(txid)。
  • Tuple_1 的 t_ctid 從 (0,1) 改寫為 (0,2),指向新插入的元組。

    Tuple_1 設(shè)置

  • t_xmax: 100、 t_ctid: (0,2)

插入新元組 Tuple_2:

  • Tuple_2 的 t_xmin 被設(shè)置為 100(當(dāng)前事務(wù) txid)。
  • t_xmax 設(shè)置為 0(尚未被刪除或更新)。
  • t_cid 設(shè)置為 0(表示這是該事務(wù)的第一條操作)。
  • t_ctid 設(shè)置為 (0,2)(指向自身)。

    Tuple_2 設(shè)置

  • t_xmin: 100、t_xmax: 0、t_cid: 0、t_ctid: (0,2)

第二條 UPDATE 命令

邏輯刪除 Tuple_2:

  • Tuple_2 的 t_xmax 被設(shè)置為 100(當(dāng)前事務(wù) txid)。
  • Tuple_2 的 t_ctid 從 (0,2) 改寫為 (0,3),指向新插入的元組。

     Tuple_2 設(shè)置

  • t_xmax: 100、t_ctid: (0,3)

插入新元組 Tuple_3:

  • Tuple_3 的 t_xmin 被設(shè)置為 100(當(dāng)前事務(wù) txid)。
  • t_xmax 設(shè)置為 0(尚未被刪除或更新)。
  • t_cid 設(shè)置為 1(表示這是該事務(wù)的第二條操作)。
  • t_ctid 設(shè)置為 (0,3)(指向自身)。

Tuple_3 設(shè)置

  • t_xmin: 100、t_xmax: 0、t_cid: 1、t_ctid: (0,3)

與刪除操作類似,如果txid=100的事務(wù)已經(jīng)提交,那么Tuple_1和Tuple_2就成了死元組,而如果txid=100的事務(wù)中止,Tuple_2和Tuple_3就成了死元組。

總結(jié)

在這個過程中,元組的狀態(tài)變化如下:

  • 插入:新元組的字段由插入事務(wù)的 txid 決定。
  • 刪除:刪除操作更新t_xmax,記錄刪除事務(wù)的txid
  • 更新:更新操作創(chuàng)建新的元組,新的 t_xmin 表示更新事務(wù),并且t_cid和t_ctid 反映新的版本信息。
責(zé)任編輯:武曉燕 來源: DBA實戰(zhàn)
相關(guān)推薦

2024-04-03 08:20:53

MySQL核心模塊

2024-06-05 11:49:33

2024-05-15 09:05:42

MySQL核心模塊

2021-09-01 14:45:08

服務(wù)器數(shù)據(jù)PostgreSQL

2024-08-28 08:50:11

MySQL核心模塊

2022-01-10 17:41:31

內(nèi)存結(jié)構(gòu)PostgreSQL

2024-03-27 13:33:00

MySQLInnoDB事務(wù)

2024-08-07 14:58:00

MySQL釋放鎖核心模塊

2021-06-21 17:00:05

云計算Hologres云原生

2025-01-17 08:17:55

2009-07-21 09:06:14

開發(fā)團隊Windows 7

2022-07-12 10:38:25

分布式框架

2019-01-23 10:42:21

華為云

2016-12-26 10:29:01

Spring框架結(jié)構(gòu)

2024-10-16 11:11:51

隔離InnoDB死鎖

2024-05-29 10:17:01

2024-10-30 10:38:08

2011-05-20 16:18:23

ADO.NET

2024-09-04 08:44:18

MySQL核心模塊

2025-02-26 08:26:38

點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 亚洲精品视频免费 | 中文字幕不卡 | 成人免费在线观看视频 | 国产高清在线观看 | 亚洲自拍偷拍欧美 | 国产伦一区二区三区四区 | 欧美成人自拍 | 国产一区二区三区免费观看视频 | 国产精品亚洲片在线播放 | 一区二区中文 | 亚洲成色777777在线观看影院 | 91高清在线观看 | 9191在线播放 | 日本精品视频一区二区三区四区 | 九九热精 | 夜夜骑首页| 久久精品一区 | 欧美激情a∨在线视频播放 成人免费共享视频 | 超碰伊人久久 | 亚洲人成网站777色婷婷 | 亚洲国产精品久久 | 伊人色综合久久天天五月婷 | 成年人在线观看视频 | 黄网站在线播放 | 日韩在线观看中文字幕 | 国产成人亚洲精品自产在线 | 欧美三级不卡 | 粉嫩国产精品一区二区在线观看 | 日韩中文字幕 | 国产1区2区3区 | 在线日韩av电影 | 亚洲免费视频网站 | av黄色免费 | 亚洲欧美久久 | 围产精品久久久久久久 | 精品久久久久久久久久久久久久 | 欧美黄色精品 | 天色综合网 | 人人精品| 一区二区不卡高清 | 久久一区二区三区四区五区 |