MySQL InnoDB 儲存結構

2021-08-28 09:21:16 字數 1323 閱讀 9818

mysql innodb 儲存結構

innodb儲存引擎的關鍵特性包括:

插入緩衝(insert buffer)

兩次寫(double write)

自適應雜湊索引(adaptive hash index)

非同步io(async io)

重新整理鄰接頁

從邏輯上講

所有的資料都被邏輯的放在乙個空間中,稱為tablespace

由上圖可以看出,tablespace由segment組成,segment由extend組成,extend由page組成,page由row組成

在mysql中缺省會有乙個共享表空間ibdata1,如果設定了innodb_file_per_table=on時,每張表內的資料放在各自的tablespace中,私有tablespace僅包括資料,索引,插入緩衝bitmap頁,而其他的例如回滾資訊,插入緩衝索引頁,系統事務資訊,二次寫緩衝等都還是放在共享表空間

資料頁的結構:

file header(檔案頭)–>38byte

page header(頁頭)–>56byte

infimun+supremum records

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

free space(空閒空間)

page directory(頁目錄)

file trailer(檔案結尾資訊)–>8byte

從物理上講

innodb是基於磁碟儲存的,並將其記錄按照頁的方式管理,因此可將其視為基於磁碟的資料庫系統。由於cpu的資料和磁碟速度之間的鴻溝,因此需要緩衝池技術來提高資料庫的整體效能

緩衝池技術簡單來說就是一塊記憶體區域,通過記憶體的速度來彌補磁碟速度較慢對於資料庫效能的影響。在資料庫中進行頁的操作,首先將磁碟讀到的頁放在緩衝池中,這個過程稱為將頁『fix』到緩衝池中,下一次再讀取相同的頁時,先判斷是否在緩衝池中,若存在,則稱該頁在緩衝池中被命中,直接從緩衝池中讀取,若不存在,則從磁碟中讀取。

緩衝池通常是通過lru演算法進行管理,同時還加入midpoint位置,新讀取的頁,將不會放到鍊錶頭端,而是放到midpoint的位置,預設配置下,該位置位於5/8處

參考:高效能mysql 第3版

mysql技術內幕-innodb儲存引擎 第2版

MySQL Innodb儲存結構

上圖擷取網際網路 innodb儲存引擎中的資料按照表空間進行管理。在初始化時建立乙個共享表空間 ibdata1 他存放innodb的所有資料 系統表,回滾 undo 資訊 5.7可以單獨配置undo表空間 插入緩衝索引頁 系統事務資訊,二次寫緩衝 若開啟了innodb file per table引...

MySQL InnoDB邏輯儲存結構

innodb儲存引擎中的表非常像oracle中的索引組織表,每張表必須得有主鍵,如果表在建立時沒有顯示定義主鍵,則根據以下原則自動建立主鍵 1 如果有非空的唯一索引,則該索引所在的列為主鍵 2 如果不符合上述條件,自動建立乙個6個位元組的指標為主鍵。innodb儲存引擎的邏輯儲存結構和oracle幾...

MySQL InnoDB 邏輯儲存結構

mysql innodb 邏輯儲存結構 從innodb儲存引擎的邏輯結構看,所有資料都被邏輯地存放在乙個空間內,稱為表空間,而表空間由段 sengment 區 extent 頁 page 組成。ps 頁在一些文件中又稱塊 block innodb儲存引擎的邏輯儲存結構大致如下 一 表空間 table...