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

存儲結構

表空間是InnoDB存儲引擎邏輯結構的最高層,全部數據都被邏輯地存在表空間中。mysql

若是開啓了innodb_file_per_table,則每張表的數據能夠單獨放在一個表空間內,可是這個表空間內只存放數據、索引、插入緩衝bitmap頁。undo信息、插入緩衝索引、系統事務信息、二次寫緩衝等依然存儲在共享表空間內。sql

表空間結構圖以下圖所示。數據庫

圖片描述

表空間

段 segment

由上圖可知表空間由各個段組成,常見的段由數據段,索引段,回滾段等,其中數據段即爲B+樹的葉子節點,索引段即爲B+樹的非索引節點,spa

區 extent

區是由連續頁組成的空間,在任何狀況下每一個區的大小都爲1MB,固然對於數據表建立伊始,表的默認大小隻有96k,區中是連續的64個頁,這時知足不了這個條件,其實數據段開始用32個碎片頁來組成,使用完這些頁以後再開始申請區來存儲,爲了保證區中頁的連續性,Innodb存儲引擎一次從磁盤申請4-5個區。指針

頁 page

innodb引擎自己是以行的形式存儲數據,這意味着每一頁存儲了一行行的數據,innodb提供了compact與rudundant格式來存儲行數據,同一個數據庫實例地全部表空間都有相同頁地大小,默認狀況下,表空間的頁大小都爲16k,這樣區裏面就須要連續的64個頁來哦填充,固然能夠經過改變innodb_page_size參數來進行修改,修改後區裏面的頁數量也會隨之改變。索引

行 row

innodb引擎支持兩種行記錄格式,分別爲Compact 與 Redundant,在此分別簡述兩種格式;圖片

  • Compact:事務

    圖片描述
    compact首部是一個非NULL變長字段長度列表,若列的長度小於255個字節,用1字節表示,若大於255字節,用2字節表示,最大不超過2字節,這也是mysql數據庫中varchar最大長度限制爲65535的緣由,以後是個null標識位,行數據中由null的則用1表示,該部分佔用1字節,接下來的部分是記錄頭信息,固定佔用5字節。最後的部分是實際存儲的每行數據,須要注意的是null不佔該部分任何空間,即null除了佔有null標誌位,實際存儲不佔用任何空間,另外,每行除了用戶定義的數據之外,還有兩個隱藏列,事務ID列與回滾指針列,分別位6字節與7字節的大小,若未定義主鍵,則每行還會生成一個6字節的rowid列。it

  • Redundant:

    圖片描述

    二者不一樣的在於Redundant首部記錄的是一個字段長度偏移列表,一樣是按照列的順序逆序放置的,若列的長度小於255個字節,用1字節表示,若大於255字節,用2字節表示,第二個部分是記錄頭部信息,不一樣於compact格式,Redundant的記錄頭佔用6字節。innodb

相關文章
相關標籤/搜索