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. Asp.net MVC]Asp.net MVC5系列——实现编辑、删除与明细信息视图

    目录 概述 实现信息的明细视图 实现信息的编辑视图 实现信息的删除视图 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net ...

  2. openstack 部署(Q版)-----glance镜像服务安装配置

    一.创建数据库 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glance.* TO '; GRANT ALL PRIVILEGES ON glanc ...

  3. web前端开发笔记(2)

    一.什么是作用域. 所有变量都存在于一个执行环境中(也称作用域),这个执行环境决定了变量的生命周期,以及哪一部分代码可以访问其中的变量.总结: 执行环境有全局执行环境和函数执行环境. 每次进入一个新执 ...

  4. 特征向量-Eigenvalues_and_eigenvectors#Graphs 线性变换

    总结: 1.线性变换运算封闭,加法和乘法 2.特征向量经过线性变换后方向不变 https://en.wikipedia.org/wiki/Linear_map Examples of linear t ...

  5. Jena 操作 RDF 文件

    1. RDF 入门 RDF(Resource Description Framework)是由W3C规定的,描述资源(resource)的数据模型(data model),: RDF 使用Web标识符 ...

  6. Wireless Network--poj2236(并查集)

    Description An earthquake takes place in Southeast Asia. The ACM (Asia Cooperated Medical team) have ...

  7. 【python-opencv】17-形态学操作-腐蚀与膨胀

    形态学操作其实就是改变物体的形状,比如腐蚀就是"变瘦",膨胀就是"变胖",看下图就明白了: 形态学操作一般作用于二值化图(也可直接作用于原图),来连接相邻的元素 ...

  8. div+css网页标准布局实例教程(二)

    五.布局页面——头部和导航 有了上边的基础,下面的任务就是要利用html和css制作完成一个完整的网页了.先从头部开始,第三小节时我们已经把整体框架给搭建好了,就像盖房子一样,整体结构已经出来了,下面 ...

  9. javaScript高级教程(六) 获取窗口,屏幕,文档信息

    1.屏幕坐标:相对于桌面左上角 窗口坐标:相对于窗口的左上角 文档坐标:相对于html文档左上角 当有滚动条时,窗口坐标与文档坐标之间有区别

  10. 总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解

    总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解 PS:Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件,本人都在多个项目中实施过,参考了一些资料,结合自己的一些使 ...