InnoDB資料頁結構

2021-10-05 08:17:43 字數 1757 閱讀 2511

file header(檔案頭)

page header(頁頭)

infimun和supermum records

user records(使用者記錄,即行記錄)

free space(空閒空間)

page directory(頁目錄)

file trailer(檔案結尾資訊)

file header、page header、file trailer的大小固定為36位元組、56位元組、8位元組,用來標記該頁的資訊

user records、free space、page directory表示實際的行記錄儲存空間,是動態的

file header用來記錄頁的一些頭資訊,由表4-3中8個部分組成,共占用38位元組。

接著file header部分的是page header,該部分用來記錄資料頁的狀態資訊,由14個部分組成,共占用56位元組。

在innodb儲存引擎中,每個資料頁中有兩個虛擬的行記錄,用來限定記錄的邊界。infimum記錄是比該頁中任何主鍵值都要小的值,supermum指比任何可能大的值還要大的值。這兩個值在頁建立時被建立,並且在任何情況下不會被刪除。

user record就是實際儲存行記錄的內容,innodb儲存引擎表總是b+樹索引組織的。

free space很明顯指的就是空閒空間,同樣也是個鍊錶資料結構。在一條記錄被刪除後,該空間會被加入到空閒鍊錶中。

page directory(頁目錄)中存放了記錄的相對位置(注意,這裡存放的是頁相對位置,而不是偏移量),有些時候這些記錄指標稱為slots(槽)或目錄槽(directory slots)。與其他資料庫系統不同的是,在innodb中並不是每個記錄擁有乙個槽,innodb儲存引擎的槽是乙個稀疏目錄(sparse directory),即乙個槽中可能包含多個記錄。偽記錄infimum的n_owned值總是為1,記錄supermum的n_owned的取值範圍為[1,8],其他使用者記錄n_owned的取值範圍為[4,8]。當記錄被插入或刪除時需要對槽進行**或平衡的維護操作。

為了檢測頁是否已經完整地寫入磁碟(如可能發生的寫入過程中磁碟損壞、機器關機等),innodb儲存引擎的頁中設定了file trailer部分。

file trailer只有乙個fil_page_end_lsn部分,占用8位元組。前4位元組代表該頁的checksum值,最後4位元組和file header中的fil_page_lsn相同。將這兩個值與file header中的fil_page_space_or_chksum和fil_page_lsn值進行比較,看是否一致(checksum的比較需要通過innodb的checksum函式來進行比較,不是簡單的等值比較),以此來保證頁的完整性(not corrupted)。

本文內容摘抄自mysql技術內幕。

InnoDB 頁管理結構

1.段段是表空間檔案中的主要組織結構,它是物理上的管理物理空間的乙個邏輯概念,它是構成索 引,表,回滾段的基本元素,建立乙個索引 b樹 時會同時建立兩個段,分別是內節點段和葉 子段,內節點段用來管理 儲存 b樹中非葉子節點 頁面 的資料,葉子段用來管理 儲存 b樹中 葉子節點的資料.乙個段由乙個in...

Mysql資料讀取方式以及InnoDb頁儲存

將資料劃分為若干個頁,以頁作為磁碟和記憶體之間互動的基本單位,inoodb中頁的大小為16kb,一般情況下一次最少讀取16kb到記憶體中並重新整理到磁碟。1頁中至少存放兩行記錄 mysql表中行儲存資料分四種 compact redundant dynamic和compressed行格式。儲存結構類...

mysql 頁 MySQL資料結構 頁結構

innodb設計了多種頁結構用於存放不同型別的資料,我們現在主要研究存放資料的頁,稱為索引頁或資料頁。每個頁由七部分組成,大致功能如下 fileheader 檔案頭 記錄頁的通用資訊,比如上下頁的頁號,頁型別,所有的資料頁其實是乙個雙鏈表 pageheader 頁頭 記錄本頁儲存記錄的狀態資訊,比如...