持續(xù)更新
邏輯存儲結(jié)構(gòu)
InnoDB存儲引擎的邏輯存儲結(jié)構(gòu)和Oracle幾乎一樣异逐,從大到小分別為:表空間、段蜈膨、區(qū)悼沿、頁,它們的關(guān)系如下圖所示:
表空間InnoDB有一個默認的表空間骚灸,如果啟用了參數(shù)innodb_file_per_table糟趾,則針對每張可以單獨放在表空間里。這里需要注意的是甚牲,即時啟用了innodb_file_per_table义郑,也并不是表中所有的數(shù)據(jù)都單獨放在自己的表空間里,單獨表空間只存放數(shù)據(jù)丈钙、索引和插入緩沖非驮,其它如Undo、系統(tǒng)事務(wù)信息雏赦、二次寫緩沖等還是存放在默認共享表空間里劫笙。
段表空間有若干各段組成,常見的有數(shù)據(jù)段星岗、索引段填大、回滾段等。前面提到InnoDB中的表是索引組織表俏橘,因此數(shù)據(jù)段也稱為leaf node segment允华,索引段也稱為non-leaf node segment。
區(qū)每64個連續(xù)的頁組成區(qū)寥掐,因此區(qū)大小正好為1M靴寂。
頁頁是InnoDB磁盤管理的最小單位,固定大小為16K召耘,不可以更改(也許通過更改源碼可以修改固定大邪倬妗)。
行InnoDB表中數(shù)據(jù)按行存儲怎茫。
記錄結(jié)構(gòu)
三個部分
Name | Size |
---|---|
Field Start Offsets | (F1) or (F2) 字節(jié) |
Extra Bytes | 6 字節(jié) |
Field Contents | 和實際數(shù)據(jù)的長度有關(guān) |
F 表示字段的數(shù)量
字段指針(Origin 或 Zero Point)并非指向 Field Start Offsets收壕,其實指向了第三部分 Field Contents 開始的位置。知道了字段指針轨蛤,再做減法蜜宪,就能得到前兩個部分的位置
1. Field Start Offsets
是一組偏移量(每個字段結(jié)尾到 Field Contents 開始的偏移量)的列表,記錄了字段的位置信息
此列表為反向排序祥山,即第一個字段的偏移量放在列表末端
比如圃验,有三個字段的長度分別為 1、2缝呕、4澳窑,則 Field Start Offsets 為 07,03,01
每個偏移量用一個字節(jié)或兩個字節(jié)表示
當(dāng)記錄總長度小于 127 字節(jié)時斧散,用一個字節(jié)表示
Extra Bytes 標(biāo)識使用了一個字節(jié)還是兩個字節(jié)
偏移量中的最高有效位通常表示 flag 標(biāo)記位
一個字節(jié)的偏移量:
Size | 備注 |
---|---|
1 bit | 1 表示字段的值是 NULL |
7 bits | 實際的偏移量。范圍 0 - 127 |
兩個字節(jié)的偏移量:
Size | 備注 |
---|---|
1 bit | 1 表示字段的值是 NULL |
1 bit | 0摊聋,字段存儲在同一頁 1鸡捐,字段存儲在不同頁(BLOB 類型的字段才會在不同頁) |
14 bits | 實際的偏移量。范圍 0 - 16383 |
2. Extra Bytes
固定長度 6 字節(jié)麻裁,即 48 位
Name | Size | Description | |
---|---|---|---|
info_bits: | () | 1 bit | 沒用 |
() | 1 bit | 沒用 | |
deleted_flag | 1 bit | 1 表示記錄已刪除 | |
min_rec_flag | 1 bit | 1 表示此記錄是預(yù)定義的最小值記錄 | |
n_owned | 4 bits | 此記錄擁有的記錄數(shù)(箍镜??煎源?) | |
heap_no | 13 bits | 記錄在索引頁堆中的序號(色迂??手销?) | |
n_fields | 10 bits | 字段數(shù)量, 1 to 1023 | |
1byte_offs_flag | 1 bit |
表示 Field Start Offsets 是一個字節(jié)還是兩個字節(jié) 1 表示是一個字節(jié) |
|
next 16 bits | 16 bits | 指向下一記錄的指針 | |
TOTAL | 48 bits | - |
3. Field Contents
存儲實際數(shù)據(jù)歇僧,按照表定義的順序存儲
頁結(jié)構(gòu)
七個部分
Fil Header | |
Page Header | |
Infimum + Supremum Records | |
User Records | |
Free Space | |
Page Directory | |
Fil Trailer |
參考資料
http://dev.mysql.com/doc/internals/en/innodb.html
楊萬富、思考mysql內(nèi)核