1. 程式人生 > >讀書筆記-MySQL運維內參07-InnoDB數據存儲結構

讀書筆記-MySQL運維內參07-InnoDB數據存儲結構

增長 連接 數據存儲 會有 ibdata1 固定 個數 如果 columns

表空間文件組成結構

InnoDB存儲引擎按照表空間進行管理。

在新建一個數據時,InnoDB存儲引擎會初始化一個名為ibdata1的表空間文件。

默認情況下,這個文件會存儲所有表的數據,以及我們所熟知但是看不到的SYS_TABLES, SYS_COLUMNS, SYS_INDEXES, SYS_FIELDS等。

此外,還用來存儲保證數據完整性的的回滾端數據。

可以通過設置InnoDB_file_per_table來設置,使得每一個表都對應一個獨立的表空間文件。

段是表空間文件的主要組織結構,它是一個邏輯概念,用來管理物理文件,是構成索引、表、回滾段的基本元素。

創建一個索引(B+)樹的同時,會創建兩個段,分別是內節點段和葉子節點段。

索引數據量一直在增長過程中,所有新的存儲空間的申請,都是從段這個邏輯概念中申請的。

更形象的說,ibd文件就是由多個端組成的,沒有任何其他空間是脫離了段的管理的。

我們已經知道,一個索引由兩個段組成,段是一個邏輯概念。段中的組織結構師什麽樣子?InnoDB引入了簇的概念,在代碼中是Extent。

簇是構成段的基本元素,一個段有若幹個簇構成。

一個簇是物理上連續分配的一段空間,每一個段至少會有一個簇,在創建一個段時會創建一個默認的簇。

如果存儲數據時,一個簇已經不足以存儲更多的數據,此時需要從這個段中分配一個新的簇來存放新的數據。

簇的空間大小是固定的,一般是64個頁。

一個索引由兩個段組成,兩個段之間的物理位置是沒有關系的。每個段由若幹個簇組成,多個簇的物理位置也是沒有關系的,但是會有指針連接。

頁面

我們已經知道段和簇的關系了。但是簇的物理空間內部還需要繼續被切分並高效管理。

頁面就是簇被細分後的產物,它是組成簇的基本單位。

頁面是段所管理的最小單位,也是數據庫文件管理的最小單位,當然也是文件中空間分配的最小單位。

一個簇中可以包括多個頁面,默認是64個。

在一個簇中,邏輯上這些頁面號都是從小到大連續的,物理上也是連續的。

每一個頁面的默認大小是16K。

讀書筆記-MySQL運維內參07-InnoDB數據存儲結構