innodb儲存引擎表空間儲存結構 讀書筆記

2021-09-11 09:56:27 字數 1183 閱讀 2214

推薦去看《mysql技術內幕:innodb儲存引擎》

表空間是innodb儲存引擎邏輯結構的最高層,所有資料都被邏輯地存在表空間中。

如果開啟了innodb_file_per_table,則每張表的資料可以單獨放在乙個表空間內,但是這個表空間內只存放資料、索引、插入緩衝bitmap頁。undo資訊、插入緩衝索引、系統事務資訊、二次寫緩衝等依然儲存在共享表空間內。

表空間結構圖如下圖所示。

由上圖可知表空間由各個段組成,常見的段由資料段,索引段,回滾段等,其中資料段即為b+樹的葉子節點,索引段即為b+樹的非索引節點,

區是由連續頁組成的空間,在任何情況下每個區的大小都為1mb,當然對於資料表建立伊始,表的預設大小只有96k,區中是連續的64個頁,這時滿足不了這個條件,其實資料段開始用32個碎片頁來組成,使用完這些頁之後再開始申請區來儲存,為了保證區中頁的連續性,innodb儲存引擎一次從磁碟申請4-5個區。

innodb引擎本身是以行的形式儲存資料,這意味著每一頁儲存了一行行的資料,innodb提供了compact與rudundant格式來儲存行資料,同乙個資料庫例項地所有表空間都有相同頁地大小,預設情況下,表空間的頁大小都為16k,這樣區裡面就需要連續的64個頁來哦填充,當然可以通過改變innodb_page_size引數來進行修改,修改後區裡面的頁數量也會隨之改變。

innodb引擎支援兩種行記錄格式,分別為compact 與 redundant,在此分別簡述兩種格式;

compact首部是乙個非null變長字段長度列表,若列的長度小於255個位元組,用1位元組表示,若大於255位元組,用2位元組表示,最大不超過2位元組,這也是mysql資料庫中varchar最大長度限制為65535的原因,之後是個null標識位,行資料中由null的則用1表示,該部分占用1位元組,接下來的部分是記錄頭資訊,固定占用5位元組。最後的部分是實際儲存的每行資料,需要注意的是null不佔該部分任何空間,即null除了占有null標誌位,實際儲存不占用任何空間,另外,每行除了使用者定義的資料以外,還有兩個隱藏列,事務id列與回滾指標列,分別位6位元組與7位元組的大小,若未定義主鍵,則每行還會生成乙個6位元組的rowid列。

兩者不同的在於redundant首部記錄的是乙個字段長度偏移列表,同樣是按照列的順序逆序放置的,若列的長度小於255個位元組,用1位元組表示,若大於255位元組,用2位元組表示,第二個部分是記錄頭部資訊,不同於compact格式,redundant的記錄頭占用6位元組。

InnoDB 儲存引擎

innodb是事務型資料庫的首選引擎,支援事務安全表 acid 支援行鎖定和外來鍵。mysql 5.5.5 之後,innodb作為預設儲存引擎。innodb的主要特性有一下幾項。a.innodb給mysql提供了具有提交 回滾和崩潰恢復能力的事務安全 acid相容 儲存引擎。innodb鎖定在行級並...

InnoDB 儲存引擎

設計上採用了類似於oracle資料庫的架構 接下來 詳細介紹 innodb 儲存引擎的 體系架構 及其不同於其他儲存引擎的特性 一 概述 innodb 儲存引擎 是第乙個完整支援acid事物的 mysql 儲存引擎 特點 1 行鎖設計 2 支援mvcc 3 提供一致性非鎖定讀 4 最有效地利用 以及...

InnoDB儲存引擎

內外存交換的基本單位 mysql將資料從外存讀入記憶體不是以記錄為單位,這樣消耗太大,是以頁為單位,每個頁裡填充記錄。每頁大小為16kb。記錄堆 行記錄儲存區,分為有效記錄和已刪除記錄兩種 自由空間鍊錶 已刪除記錄組成的鍊錶 未分配空間 頁尾 儲存頁面校驗資訊 頁內的資料是按照主鍵的順序有序儲存的。...