Mysql InnoDB資料頁結構

2022-07-29 12:33:14 字數 2155 閱讀 6024

官方名字:索引頁

所以你知道了,user records 和 free space 之間是此消彼長的關係

簡化下,因為變長字段長度列表,null值列表都沒什麼用

所以儲存記錄為:

* delete_mask:標記是否刪除了

* heap_no:記錄的序號,序號為0的記錄是infimum,序號1為spuermum(這倆是mysql為我們自動提供的),所以我們自己的都是從2開始的,這個排序是通過主鍵的比較規則來的

假如刪除一條資料:

那麼就等著下一條資料來,直接覆蓋就完事了

提問:為什麼指標指的是中間位置,哈哈哈,這就是為什麼左邊的可變長字段長度列表是逆序的原因了,從中間,往兩邊同時讀,剛好都是順的。自己畫圖理解下吧。

將每個組的最大heap_no的記錄偏移位址存在page_directory,這樣查詢的時候,就可以通過page_directory二分查詢,然後再進入相應的組中找,美滋滋。

組的大小一般都是1-8個左右。

有乙個校驗和a

還有指向下乙個頁面

存的都是跟頁面有關的資訊

校驗和b 

假如現需要將資料頁寫入磁碟,寫到中途斷電了,那麼校驗和a和校驗和b勢必不一樣,那麼就說明出錯了,只寫了一半。

innodb為了不同的目的設計了不同型別的頁,我們把用於存放記錄的頁叫做資料頁

乙個資料頁可以被大致分為7個部分,分別是:file header:表示頁的一些通用資訊,佔固定的38位元組

page header:表示資料頁專有的一些資訊,佔固定的56個位元組

infimum + supremum:兩個虛擬的偽記錄,分別表示頁中的最小和最大記錄,佔固定的26個位元組

user records:真實儲存我們插入的記錄的部分,大小不固定

free space:頁中尚未使用的部分,大小不確定

file trailer:用於檢驗頁是否完整的部分,占用固定的8個位元組

每個記錄的頭資訊中都有乙個next_record屬性,從而使頁中的所有記錄串聯乙個單鏈表

innodb會為把頁中的記錄劃分為若干個組,每個組的最後乙個記錄的位址偏移量作為乙個槽,存放在page_directory中,所以在乙個頁中根據主鍵查詢記錄是非常快的,分為兩步:通過二分法確定槽

通過記錄的next_record屬性遍歷該槽所在的組中的各個記錄

為保證從記憶體中同步到磁碟的頁的完整性,在頁的首部和尾部都會儲存頁中資料的校驗和和頁面最後修改時對應的lsn值,如果首部和尾部的校驗和和lsn值校驗不成功的話,就說名同步失敗了。

MySQL innodb 資料頁結構分析

頁 page 是 innodb 儲存引擎用於管理資料的最小磁碟單位。常見的頁型別有資料頁 undo 頁 系統頁 事務資料頁等,本文主要分析的是資料頁。預設的頁大小為 16kb,每個頁中至少儲存有 2 條或以上的行記錄,本文主要分析的是頁與行記錄的資料結構,有關索引和 b tree 的部分在後續文章中...

Mysql InnoDb資料頁的組成及記錄維護

一 mysql innodb資料頁的組成,單頁資料頁的大小為16kb,由以下七部分組成 2.資料頁頭 記錄頁面的控制資訊。大小是56個位元組,包括頁的左右兄弟頁面指標 雙向鍊錶 頁面的空間使用情況。3.虛記錄 最大虛記錄和最小虛記錄。4.記錄堆 行記錄儲存區,分為有效記錄和已刪除記錄 自由空間鍊錶 ...

Mysql InnoDB引擎的索引與儲存結構詳解

前言 在oracle 和sql server等資料庫中只有一種儲存引擎,所有資料儲存管理機制都是一樣的。而mysql資料庫提供了多種儲存引擎。使用者可以根據不同的需求為資料表選擇不同的儲存引擎,使用者也可以根據自己的需要編寫自己的儲存引擎。mysql主要儲存引擎的區別 mysql預設的儲存引擎是my...