1. 程式人生 > >InnoDB儲存引擎基礎

InnoDB儲存引擎基礎

分散式儲存中指明瞭儲存的下層就是儲存引擎,所以就拿一個實際的儲存引擎進行學習瞭解,儲存引擎究竟是如何操作使用的。下面對InnoDB儲存引擎做一個簡單的總結。

1、什麼是InnoDB儲存引擎,在此儲存引擎上支撐的什麼樣的資料庫

InnoDB目前支援上層的資料庫為MySQL,目前支援MySQL的相關特性由:ACID的事務,行鎖,MVCC版本控制,外來鍵,非鎖定讀

2、關於Innodb的原始碼中基本結構

innode預設有一個記憶體池和持久化的磁碟,其中記憶體池中執行有7個執行緒,其中有4個IO執行緒,有一個主執行緒,一個鎖執行緒,還有一個錯誤監控執行緒

3、innode記憶體的緩衝區中快取的資料有:

資料頁 索引頁 插入換成區 自適應雜湊索引 鎖資訊 資料字典資訊

4、master主執行緒的主要操作

每秒鐘進行重新整理操作:

總是將日誌重新整理到磁碟上 可能合併插入緩衝,取決於一秒內IO的次數 最多重新整理100個髒頁到磁碟上 沒有使用者活動,自動切換到後臺操作

每10s進行的重新整理操作

重新整理100個髒頁到磁碟上 合併至多5個插入緩衝 將日誌重新整理到磁碟上 產生一個檢查點等

5、innode為了考慮緩衝區和磁碟IO的平衡,使用的不是之前瞭解的單純的LRU演算法,使用下面的方法:

將記憶體中修改的頁稱為髒頁,待重新整理到磁碟上

插入的新頁不是直接插入到LRU緩衝區中,專門設定了一個插入緩衝區,新頁插入到插入緩衝區中

即不是像傳統的一樣未命中替換末尾冷的資料頁,而是可以將多個髒頁重新整理到磁碟上,記憶體緩衝區剩餘空也,可以直接被插入,通過這種方法來維護快取的。

6、聚集索引和非聚集索引的區別

聚集索引:

物理存放的順序和索引存放的資料一致,即索引的前後對應的資料位置的前後

打個比方:漢語字典中的拼音索引,漢字正文也是按照拼音進行排序的

非聚集索引:

物理存放的順序與索引存放的資料是不一致的

打個比方:漢語字典中的偏旁部首,偏旁部首的相鄰的資料索引,正文實際位置並不相鄰

7、聚集索引和非聚集索引插入時候的區別

對於聚集索引:物理位置插入後,直接在索引+1後面插入即可

對於非聚集索引,插入後,還需要首先通過聚集索引找到新插入的頁,然後計算非聚集索引,然後離散的訪問下一個非聚集索引。

8、innod中對於非聚集索引的優化

針對非聚集索引這種離散化的讀操作,innod對這種進行了優化

優化方式:

使用插入緩衝區,innodb在記憶體中開闢了一個區域叫做插入緩衝區,這個緩衝區是用來處理插入非聚集索引的。

主要執行以下操作:

插入的非聚集索引是否命中,命中則直接返回 未命中,則加入到插入緩衝區 在緩衝區進行合併操作,將多個非聚集縮影操作合併稱為一個操作,即操作一個索引頁,通過這種方法減少非聚集索引離散度的影響、

9、innodb兩次寫入方法賴保證資料的可靠性

innodb 寫入時採用兩次寫的思想,並不是直接把資料髒頁重新整理到磁碟上,而是先後兩個將資料順序的寫入到磁碟的書共享表空間,在從磁碟的共享表空間同步到磁碟的物理區域上。

10、innodb中自適應雜湊索引的技術

用於雜湊索引查詢的速度非常快,但是雜湊的過程建立是耗時的,所以innodb中提出了自適應雜湊索引

首先,innodb對索引的查詢進行監控,如果使用者對某些資料的索引訪問非常頻繁,則會自動為這些資料使用雜湊索引,建立索引表,這樣下次訪問這些頻繁的資料即可使用雜湊索引。

但是雜湊索引僅僅用於SQL進行等值查詢,返回查詢是不行的、

11、innodb的檔案

除了上述講了以下關於innode的操作知識,innode對外存放有效的資料是表空間的形式存放的

每個以innodb引擎的表都會產生一個表空間,該檔案存放表的索引和插入緩衝的一些資訊

除了表空間檔案外,還有一個重做日誌檔案,用來恢復事務日誌。