INNODB引擎概述
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引擎概述的更多相关文章
- mysql innodb 引擎
innodb 引擎 一.概述 InnoDB 是一个用的比较广泛的存储引擎,因为它支持事物和外键,还有不错的效率;我们先看看官方教程怎么说; 我们先读一下, 对于上面的文档, 对一个InnoDB的表首先 ...
- MySQL体系结构和存储引擎概述
MySQL体系结构和存储引擎概述 一.定义数据库和实例 数据库: 物理操作系统文件或其他形式文件类型的集合.数据库文件可以是frm.MYD.ibd 结尾的文件. 从概念上来说,数据库是文件的集合,是 ...
- MYSQL 存储引擎概述
一.存储引擎 Mysql中的数据用各种不同的技术存储在文件(或者内存)中.这些技术中每一种技术都使用了不同的存储机制,索引技巧.锁定水平并且最终提供广泛的不同功能和能力.通过选择不同的技术,你能够获得 ...
- Mysql优化系列(1)--Innodb引擎下mysql自身配置优化
1.简单介绍InnoDB给MySQL提供了具有提交,回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎.InnoDB锁定在行级并且也在SELECT语句提供一个Oracle风格一致的非锁定读.这些特色 ...
- 查看MySQL是否支持InnoDB引擎以及不支持的解决办法
通过命令行进入mysql SHOW variables like "have_%"; 显示结果中会有如下3种可能的结果: have_innodb YES have_innodb N ...
- MYSQL 5.6中禁用INNODB引擎
并不是所有人都需要INNODB引擎,虽然它弥补了MYSQL缺乏事务支持的毛病,但是它的磁盘性能一直是让人比较担忧的.另外比较老的PHP系统,大多是采用MYISAM引擎在MYSQL建表,似乎INNODB ...
- MySQL数据库InnoDB引擎下服务器断电数据恢复
说明: 线上的一台MySQL数据库服务器突然断电,造成系统故障无法启动,重新安装系统后,找到之前的MySQL数据库文件夹. 问题: 通过复制文件的方式对之前的MySQL数据库进行恢复,发现在程序调用时 ...
- zabbix使用tokudb引擎替换innodb引擎
zabbix数据量大,数据量增长很快,使用tokudb可以更好的压缩 使用tokudb,用percona 或mariadb数据库 1.查看数据库版本 (1)登录数据库的时候可以看到 (2)status ...
- 【MySQL】InnoDB引擎ibdata文件损坏/删除后使用frm和ibd文件恢复数据
参考:http://my.oschina.net/sansom/blog/179116 参考:http://www.jb51.net/article/43282.htm 注意!此方法只适用于innod ...
随机推荐
- easyui_2----messager
<script> $.messager.alert("这是头","这是内容"); </script> 必须放在 $(function() ...
- POJ 2987 - Firing - [最大权闭合子图]
题目链接:http://poj.org/problem?id=2987 Time Limit: 5000MS Memory Limit: 131072K Description You’ve fina ...
- SQL Fundamentals || Single-Row Functions || 转换函数 Conversion function
SQL Fundamentals || Oracle SQL语言 SQL Fundamentals: Using Single-Row Functions to Customize Output使 ...
- 11.20 HTML及CSS
<div>用于分组HTML元素的块级元素HTML表单,用于收集不同类型的用户输入<input type='radio'>:定义了表单的单选框按钮<input type=' ...
- hadoop HA架构安装部署(QJM HA)
###################HDFS High Availability Using the Quorum Journal Manager########################## ...
- initrd和initramfs的区别
Linux内核在初始化之后会执行init进程,而init进程会挂载我们的根文件系统,但由于init程序也是在根文件系统上的,所以这就有了悖论.Linux采用两步走的方法来解决这个问题.Linux2 ...
- 动画-缩放,旋转 CGAffineTransform
CGAffineTransform transform; // = CGAffineTransformScale(flyImoji.transform, 8, 8); transform = C ...
- Python 字典 dict() 函数
描述 Python 字典 dict() 函数用于创建一个新的字典,用法与 Pyhon 字典 update() 方法相似. 语法 dict() 函数函数语法: dict(key/value) 参数说明: ...
- 使用 SendARP 获取 MAC 地址(使用SendARP API函数,很多相关文章)
ARP 协议地址解析协议(ARP)是通过解析网路层地址来找寻数据链路层地址的一个在网络协议包中极其重要的网络传输协议.ARP 最初在 1982 年的 RFC 826 中提出并纳入互联网标准 STD 3 ...
- Python开发【笔记】:python程序添加到systemctl系统服务
systemctl系统服务 环境:centos7 systemctl服务使用详解 实现 正常情况下我们在/usr/lib/systemd/system/目录下,创建一个以.service 后缀的文件, ...