MySQL核心 InnoDB儲存引擎 試讀

2021-09-12 05:34:00 字數 1788 閱讀 3802

《mysql核心:innodb儲存引擎 卷1》從原始碼層次分析了innodb的體系結構、原理、工作機制等,結合實踐案例,對我們想深入學習mysql innodb 核心原理來說,是不可多得的好書。

思考:mysql innodb引擎同 myisam 的比較

myisam是非事務安全型,而innodb是事務安全型。

myisam鎖的粒度是表級,而innodb支援行級鎖定。

myisam支援全文型別索引,而innodb不支援全文索引。

。。。。

innodb儲存引擎**模組劃分

基礎:filemananger模組:對檔案操作,如讀寫、非同步i/o等

concurrencymanager:併發,封裝引擎內部使用的mutex、latch等

common utility:基本演算法和資料結構

核心:索引、事務、lock、快取、日誌、儲存等模組

innodb儲存引擎以嵌入方式同mysql結合。

第2章 介紹了innodb記憶體管理系統的基本實現及資料結構。採用記憶體堆的方式關聯記憶體物件。通過一次性分配大塊記憶體來減少記憶體申請(malloc)、釋放(free)帶來的開銷。

分為緩衝池分配(從緩衝池中分配記憶體)、動態分配(直接系統分配:malloc函式)。

記憶體管理的層次結構

記憶體堆層

緩衝層、通用記憶體池

系統記憶體

記憶體堆層

記憶體堆類似stack,通過增加記憶體塊增加空間,從stack top位置釋放相應記憶體塊。記憶體塊之間以鍊錶的形式管理。記憶體塊結構:men_block_info_t(見書p9)

記憶體堆中各個記憶體塊組織形式:(圖02)

記憶體堆分類:

記憶體堆建立函式:men_heap_create_func,通過不同分配方式(3種)初始化堆記憶體大小、指標。

通用記憶體池

men_common_pool物件,資料結構:men_pool_struct,包括記憶體池分配的起始位置、大小size、已分配大小reserved;記憶體單元鍊錶節點陣列free_list。

通用記憶體池通過free_list[64]、men_area_struct組成夥伴系統。記憶體池分成64個記憶體區鍊錶,以2^n(n<=64)分配記憶體。文中通過例項進行了明確的講解:

安規則將記憶體分割,再看申請空間大小進行更小分塊。釋放則將相連的空閒空間進行合併。

基本演算法結構

本文還對基本的演算法結構(雜湊演算法、雙向鍊錶(基於記憶體、磁碟)、動態陣列),基本排序實現做了相應的介紹。  

雙鏈表應用場景及區別:

記憶體雙鏈表:緩衝池、事務、lock、檔案管理等。用於記憶體中快速定位

磁碟雙鏈表:表空間管理、事務管理、b樹模組;用於建立磁碟中資料結構之間的關係。

MySQL核心解析 Innodb頁面儲存結構 1

本文介紹innodb的索引資料頁面儲存結構,主要介紹資料頁面的整體結構,而頁面的詳細結構將會在另一篇中介紹。1.b 樹 閱讀本文前,首先要知道一些關於b樹的基礎知識。innodb的乙個表可能包含多個索引,每個索引都使用b 樹來儲存。而索引包括聚集索引和二級索引,聚集索引使用表的主鍵作為索引鍵,包含表...

MySQL儲存引擎 InnoDB

為什麼innodb不將總數存起來?innodb直接count 會遍歷全表 沒有where條件 雖然結果準確,但會導致效能問題。按照效率排序的話,count 字段 innodb一棵b 樹可以存放多少行資料?這個問題的簡單回答是 約2千萬。為什麼是這麼多呢?因為這是可以算出來的,要搞清楚這個問題,我們先...

MySQL的儲存引擎INNODB

1 一般情況下,mysql會預設提供多種儲存引擎,你可以通過下面的檢視 看你的mysql現在已提供什麼儲存引擎 mysql show engines 看你的mysql當前預設的儲存引擎 mysql show variables like storage engine 你要看某個錶用了什麼引擎 在顯示...