MySQL技術內幕-InnoDB存儲引擎-第二章、InnoDB存儲引擎

InnoDB存儲引擎

InnoDB是事務安全的MySQL存儲引擎,通常來說,它是OLTP(Online Transactional Processing,聯機事務處理)應用中核心表的首選存儲引擎。

一、InnoDB存儲引擎概述

從MySQL5.5版本開始,InnoDB開始是默認的表存儲引擎(之前的版本InnoDB存儲引擎僅在Windows下爲默認的存儲引擎)。該存儲引擎是第一個完整支持ACID事務的MySQL存儲引擎(BDB是第一個支持事務的MySQL存儲引擎,現在以及停止開發)。
特點:

  • 支持行鎖
  • 支持MVCC
  • 支持外鍵
  • 提供一致性非鎖定讀

InnoDB上處理插入/更新操作的速度平均爲800次/秒。這都證明了InnoDB是一個高性能、高可用、高可擴展的存儲引擎。

二、InnoDB存儲引擎的版本

InnoDB存儲引擎包含於所有的MySQL數據庫的二進制發行版本中。早期其版本隨着MySQL數據庫的更新而更新。從5.1版本開始,MySQL數據庫允許存儲引擎開發商以動態方式加載引擎,這樣存儲引擎的更新可以不受數據庫版本的限制
所以在5.1中,可以支持兩個版本的InnoDB,一個是靜態編譯的InnoDB版本,可以看成是老版本的InnoDB,另外一個是動態加載的版本,可以將其看成InnoDB1.0.x版本,官方稱爲InnoDB Plugin。
MySQL5.5版本中又將InnoDB的版本升級到了1.1.x。而後最近的MySQL5.6版本中,InnoDB的版本也隨着升級爲1.2.x版本。
在這裏插入圖片描述
由於不支持多回滾段,InnoDB Plugin支持的最大支持併發事務數量也被限制在了1023。

三、InnoDB體系架構

下圖顯示了InnoDB的存儲引擎的體系結構,從圖中可看出,InnoDB存儲引擎有多個內存塊,可以認爲這些內存塊組成了一個大的內存池,負責如下工作:

  • 維護所有進程/線程需要訪問的多個內部數據結構
  • 緩存磁盤上的數據,方便快速的讀取,同時在對磁盤文件的數據修改之前在這裏緩存。
  • 重做日誌(redo log)緩衝。

  • 在這裏插入圖片描述

後臺線程的主要作用是負責刷新內存池中的數據,保證緩存池中的內存緩存的是最近的數據,此外將已修改的數據文件刷新到磁盤文件,同時保證在數據庫發生異常的情況下InnoDB能恢復到正常運行狀態。

1、後臺線程

InnoDB存儲引擎是多線程的模型,因此其後臺有多個不同的後臺線程,負責處理不同的任務。

Master Thread(主要負責將緩存池數據刷新到磁盤)

Master Thread是一個非常核心的後臺線程,主要負責將緩衝池中的數據異步刷新到磁盤,保證數據的一致性。包括髒頁的刷新、合併插入緩衝、UNDO頁的回收等。

IO Thread(主要負責寫IO請求的回調處理)

在InnoDB存儲引擎中大量使用了AIO(Async IO)來處理寫IO請求,這樣可以極大提高數據庫的性能。而IO Thread的工作主要是負責這些IO請求的回調處理。

在InnoDB1.0版本之前共有4個IO Thread,分別是write、read、insert buffer和log IO thread。在Linux平臺下,IO Thread的數量不能進行調整,但是在Windows平臺下,可以通過參數innodb_file_io_threads來增大IO Thread。從InnoDB1.0.x版本開始,read Thread和write Thread分別增大到了4個,並且不再使用innodb_file_io_threads參數,而是分別使用innodb_read_io_threads和innodb_write_io_threads參數進行設置,如:
在這裏插入圖片描述
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章