INNODB引擎概述

INNODB存儲引擎的歷史概述:

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能恢復到正常狀態。性能

INNODB存儲引擎是多線程模型,後臺有許多不一樣的後臺線程。spa

1:Master Thread

是一個很是核心的後臺線程,主要負責將緩衝池中的數據異步刷新到磁盤,保證數據的一致性。線程

2:Io Thread

在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存儲引擎】

相關文章
相關標籤/搜索