INNODB存儲引擎是OLTP應用中核心表的首選存儲引擎。mysql
INNODB存儲引擎包含在全部mysql數據庫的二進制發行版本中。早期其版本隨着mysql數據庫的更新而更新。linux
從mysql5.1開始,mysql數據庫容許存儲引擎開發商以動態形式加載引擎,這樣存儲引擎的更新能夠不受mysql數據庫版本的限制。sql
mysql5.1中,能夠支持兩個版本的INNODB,一個是靜態編譯的INNODB版本,能夠將其看做老版本的INNODB,另一個是動態加載的INNODB版本,官方稱爲INNODB plugin,或者INNODB1.0.數據庫
mysqk5.5又將INNODB版本升級到了1.1x緩存
mysql5.6又將其升級到了1.2x多線程
各版本之間的比較異步
老版本的INNODB: 支持ACID,行鎖設計, MVCC INNODB1.0x 繼承了上述版本的全部功能,增長了compress和dynamic頁格式 INNODB1.1x 繼承了上述版本的全部功能,增長了linux AIO,多回滾段 INNODB 1.2x 繼承了上述版本的全部功能,增長了全文索引支持,在線索引添加
INNODB的後臺線程主要做用:刷新內存池中的數據,保證緩衝池中的內存緩存的是最近的數據。 其二:將已修改的數據文件刷新到磁盤文件,同時保證數據庫發生異常的狀況下INNODB能恢復到正常狀態。性能
INNODB存儲引擎是多線程模型,後臺有許多不一樣的後臺線程。spa
是一個很是核心的後臺線程,主要負責將緩衝池中的數據異步刷新到磁盤,保證數據的一致性。線程
在INNODB存儲引擎中大量使用了AIO(異步IO)來處理IO請求,這樣能夠大大提升數據庫的性能。
有四種IO Thread分別爲: read, write, insert buffer和log IO thread。
默認狀況下read thred和write thread分別爲4個:
MariaDB [(none)]> show engine innodb status\G -------- I/O thread 0 state: waiting for completed aio requests (insert buffer thread) I/O thread 1 state: waiting for completed aio requests (log thread) I/O thread 2 state: waiting for completed aio requests (read thread) I/O thread 3 state: waiting for completed aio requests (read thread) I/O thread 4 state: waiting for completed aio requests (read thread) I/O thread 5 state: waiting for completed aio requests (read thread) I/O thread 6 state: waiting for completed aio requests (write thread) I/O thread 7 state: waiting for completed aio requests (write thread) I/O thread 8 state: waiting for completed aio requests (write thread) I/O thread 9 state: waiting for completed aio requests (write thread)
如上讀線程的id老是小於寫線程的id。
讀寫線程的個數能夠經過以下兩個參數控制:
MariaDB [(none)]> show variables like "innodb_%io_threads"\G *************************** 1. row *************************** Variable_name: innodb_read_io_threads Value: 4 *************************** 2. row *************************** Variable_name: innodb_write_io_threads Value: 4 2 rows in set (0.01 sec) MariaDB [(none)]>
3: Purge Thread
事務被提交以後,其所使用的的undo log可能再也不須要,所以須要使用Purge thread來回收已經使用並分配的undo頁。在innodb1.1以前,purge僅在master thread中完成。innodb1.1以後能夠用一個單獨的線程來完成。
innodb_purge_threads=1 #能夠在配置文件中指定
#在innodb1.2以後其參數的值能夠設置爲大於1,能夠啓動多個purge thread線程
4:Page Cleaner Thread
在innodb1.2版本以後引入的,做用是將以前版本中髒頁刷新操做放入單獨的線程,減輕master thread的負擔。
參考書籍【MySQL 技術內幕 --innodb存儲引擎】