INNODB存储引擎的历史概述:

INNODB存储引擎是OLTP应用中核心表的首选存储引擎。

INNODB存储引擎包含在所有mysql数据库的二进制发行版本中。早期其版本随着mysql数据库的更新而更新。

从mysql5.1开始,mysql数据库允许存储引擎开发商以动态形式加载引擎,这样存储引擎的更新可以不受mysql数据库版本的限制。

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 .2x 继承了上述版本的所有功能,增加了全文索引支持,在线索引添加

INNODB的后台线程:

INNODB的后台线程主要作用:刷新内存池中的数据,保证缓冲池中的内存缓存的是最近的数据。 其二:将已修改的数据文件刷新到磁盘文件,同时保证数据库发生异常的情况下INNODB能恢复到正常状态。

INNODB存储引擎是多线程模型,后台有许多不同的后台线程。

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 state: waiting for completed aio requests (insert buffer thread)
I/O thread state: waiting for completed aio requests (log thread)
I/O thread state: waiting for completed aio requests (read thread)
I/O thread state: waiting for completed aio requests (read thread)
I/O thread state: waiting for completed aio requests (read thread)
I/O thread state: waiting for completed aio requests (read thread)
I/O thread state: waiting for completed aio requests (write thread)
I/O thread state: waiting for completed aio requests (write thread)
I/O thread state: waiting for completed aio requests (write thread)
I/O thread state: waiting for completed aio requests (write thread)

如上读线程的id总是小于写线程的id。

读写线程的个数可以通过如下两个参数控制:

MariaDB [(none)]> show variables like "innodb_%io_threads"\G
*************************** . row ***************************
Variable_name: innodb_read_io_threads
Value:
*************************** . row ***************************
Variable_name: innodb_write_io_threads
Value:
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存储引擎】

INNODB引擎概述的更多相关文章

  1. mysql innodb 引擎

    innodb 引擎 一.概述 InnoDB 是一个用的比较广泛的存储引擎,因为它支持事物和外键,还有不错的效率;我们先看看官方教程怎么说; 我们先读一下, 对于上面的文档, 对一个InnoDB的表首先 ...

  2. MySQL体系结构和存储引擎概述

     MySQL体系结构和存储引擎概述 一.定义数据库和实例 数据库: 物理操作系统文件或其他形式文件类型的集合.数据库文件可以是frm.MYD.ibd 结尾的文件. 从概念上来说,数据库是文件的集合,是 ...

  3. MYSQL 存储引擎概述

    一.存储引擎 Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中每一种技术都使用了不同的存储机制,索引技巧.锁定水平并且最终提供广泛的不同功能和能力.通过选择不同的技术,你能够获得 ...

  4. Mysql优化系列(1)--Innodb引擎下mysql自身配置优化

    1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...

  5. 查看MySQL是否支持InnoDB引擎以及不支持的解决办法

    通过命令行进入mysql SHOW variables like "have_%"; 显示结果中会有如下3种可能的结果: have_innodb YES have_innodb N ...

  6. MYSQL 5.6中禁用INNODB引擎

    并不是所有人都需要INNODB引擎,虽然它弥补了MYSQL缺乏事务支持的毛病,但是它的磁盘性能一直是让人比较担忧的.另外比较老的PHP系统,大多是采用MYISAM引擎在MYSQL建表,似乎INNODB ...

  7. MySQL数据库InnoDB引擎下服务器断电数据恢复

    说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...

  8. zabbix使用tokudb引擎替换innodb引擎

    zabbix数据量大,数据量增长很快,使用tokudb可以更好的压缩 使用tokudb,用percona 或mariadb数据库 1.查看数据库版本 (1)登录数据库的时候可以看到 (2)status ...

  9. 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据

    参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...

随机推荐

  1. uid列表来讲讲我是如何利用php数组进行排重的

    经常接到要对网站的会员进行站内信.手机短信.email进行群发信息的通知,用户列表一般由别的同事提供,当中难免会有重复,为了避免重复发送,所以我在进行发送信息前要对他们提供的用户列表进行排重. 假如得 ...

  2. Django模板的加深

    网站模板的设计,一般的,都有一些通用的设计,有导航.底部.统计等相关代码:nav.html.bottom.html.tongji.html 在我前面Django工程的基础上建立一个base.html包 ...

  3. Ubuntu:/etc/rc.local 可执行权限问题

    VmWare 11.1.2 安装Ubuntu 12.04系列版本, /etc/rc.local 有可执行权限. 安装Ubuntu 14.04系列版本,发现 /etc/rc.local 没有可执行权限, ...

  4. Linux CPU实时监控mpstat命令详解

    简介 mpstat是Multiprocessor Statistics的缩写,是实时系统监控工具.其报告与CPU的一些统计信息,这些信息存放在/proc/stat文件中.在多CPUs系统里,其不但能查 ...

  5. Oracle安装部署之Oracle 10g在redhat5下的安装

    [root@localhost ~]# groupadd dba -g 111 [root@localhost ~]# groupadd oinstall -g 110 [root@localhost ...

  6. Mac操作技巧

    Command+Option+P+R,重置PRAM的. 官方关于重置PRAM的说明.(有助于电脑提速) 安装新版系统的时候失败,原因是下载的镜像有问题版本不对,具体是中国区暂未更新镜像,下载下来的有问 ...

  7. 3322.org

    3322.org — Krebs on Security https://krebsonsecurity.com/tag/3322-org/

  8. 安装中文输入法 ubuntu shortcut desktop

    安装中文输入法 Kali自带是不能输入中文的,因此我安装了搜狗输入法和谷歌输入法(我做备份的),安装其一便可以.建议安装前apt-get update下,刷新下.其次安装好任意输入法需要重启下才能正常 ...

  9. Cocos2d比较好的博客

    1 .http://blog.csdn.net/bill_man/article/details/7202458 学习笔记 2.http://cocos2d-x.org/ 官网 3.http://ww ...

  10. 解决UITableView分割线距左边有距离的办法

    首先在viewDidLoad方法中加上如下代码: if ([self.tableView respondsToSelector:@selector(setSeparatorInset:)]) {    ...