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引擎的表都會產生一個表空間,該檔案存放表的索引和插入緩衝的一些資訊
除了表空間檔案外,還有一個重做日誌檔案,用來恢復事務日誌。