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