mysql innodb 邏輯儲存結構
從innodb儲存引擎的邏輯結構看,所有資料都被邏輯地存放在乙個空間內,稱為表空間,而表空間由段(sengment)、區(extent)、頁(page)組成。ps:頁在一些文件中又稱塊(block)。
innodb儲存引擎的邏輯儲存結構大致如下:
一、表空間(table space)
表空間分為了兩種,這裡簡單的概括一下:
1. 獨立表空間:每乙個表都將會生成以獨立的檔案方式來進行儲存,每乙個表都有乙個.frm表描述檔案,還有乙個.ibd檔案。 其中這個檔案包括了單獨乙個表的資料內容以及索引內容,預設情況下它的儲存位置也是在表的位置之中。
2. 共享表空間: innodb的所有資料儲存在乙個單獨的表空間裡面,而這個表空間可以由很多個檔案組成,乙個表可以跨多個檔案存在,所以其大小限制不再是檔案大小的限制,而是其自身的限制。從innodb的官方文件中可以看到,其表空間的最大限制為64tb,也就是說,innodb的單錶限制基本上也在64tb左右了,當然這個大小是包括這個表的所有索引等其他相關資料。
innodb把資料儲存在表空間內,表空間可以看作是innodb儲存引擎邏輯結構的最高層。本質上是乙個由乙個或多個磁碟檔案組成的虛擬檔案系統。innodb用表空間並不只是儲存表和索引,還儲存了回滾段、雙寫緩衝區等。
二、段(segment)
表空間是由各個段組成的,常見的段有資料段、索引段、回滾段等。前一篇文章(mysql innodb 索引組織表 & 主鍵作用)已經介紹了關於innodb儲存引擎室索引組織(index organized),因此資料即索引,索引即資料。那麼資料段即為b+樹段葉子節點(leaf node segment),索引段即為b+樹段非索引節點。
三、區(extent)
區是由連續的頁(page)組成的空間,在任何情況下每個區大小都為1mb,為了保證頁的連續性,innodb儲存引擎每次從磁碟一次申請4-5個區。預設情況下,innodb儲存引擎的頁大小為16kb,即乙個區中有64個連續的頁。 (1mb/16kb=64)
innodb1.0.x版本開始引入壓縮頁,每個頁的大小可以通過引數key_block_size設定為2k、4k、8k,因此每個區對應的頁尾512、256、128.
innpdb1.2.x版本新增了引數innodb_page_size,通過該引數可以將預設頁的大小設定為4k、8k,但是頁中的資料不是壓縮的。
但是有時候為了節約磁碟容量的開銷,建立表預設大小是96kb,區中是64個連續的頁。(對於一些小表)
四、頁(page)
頁是innodb儲存引擎磁碟管理的最小單位,每個頁預設16kb;innodb儲存引擎從1.2.x版本礙事,可以通過引數innodb_page_size將頁的大小設定為4k、8k、16k。若設定完成,則所有表中頁的大小都為innodb_page_size,不可以再次對其進行修改,除非通過mysqldump匯入和匯出操作來產生新的庫。
innodb儲存引擎中,常見的頁型別有:
1. 資料頁(b-tree node)
2. undo頁(undo log page)
3. 系統頁 (system page)
4. 事物資料頁 (transaction system page)
5. 插入緩衝點陣圖頁(insert buffer bitmap)
6. 插入緩衝空閒列表頁(insert buffer free list)
7. 未壓縮的二進位製大物件頁(uncompressed blob page)
8. 壓縮的二進位製大物件頁 (compressed blob page)
五、行(row)
innodb儲存引擎是面向列的(row-oriented),也就是說資料是按行進行存放的,每個頁存放的行記錄也是有硬性定義的,最多允許存放16kb/2-200,即7992行記錄。
若有不恰當之處,還望指教,謝謝!
[1]. mysql技術內幕:innodb儲存引擎
MySQL InnoDB邏輯儲存結構
innodb儲存引擎中的表非常像oracle中的索引組織表,每張表必須得有主鍵,如果表在建立時沒有顯示定義主鍵,則根據以下原則自動建立主鍵 1 如果有非空的唯一索引,則該索引所在的列為主鍵 2 如果不符合上述條件,自動建立乙個6個位元組的指標為主鍵。innodb儲存引擎的邏輯儲存結構和oracle幾...
mysql InnoDB儲存引擎
innodb的組成部分 1.後台執行緒 2.儲存引擎記憶體池 innodb儲存引擎記憶體緩衝池 1.記憶體緩衝池 innodb是基於磁碟儲存的,並將其中的記錄按照頁的方式進行管理。因此,可將其視為基礎磁碟的資料庫系統。在資料庫系統中,由於cpu速度與磁碟速度之間的紅狗,基於磁碟的資料庫系統通常使用緩...
MySQL InnoDB 儲存結構
mysql innodb 儲存結構 innodb儲存引擎的關鍵特性包括 插入緩衝 insert buffer 兩次寫 double write 自適應雜湊索引 adaptive hash index 非同步io async io 重新整理鄰接頁 從邏輯上講 所有的資料都被邏輯的放在乙個空間中,稱為t...