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 ...
随机推荐
- 洛谷P2564 生日礼物【单调队列】
题目背景 四川2009NOI省选 题目描述 小西有一条很长的彩带,彩带上挂着各式各样的彩珠.已知彩珠有N个,分为K种.简单的说,可以将彩带考虑为x轴,每一个彩珠有一个对应的坐标(即位置).某些坐标上可 ...
- Oracle Function:TO_CHAR
Description The Oracle/PLSQL TO_CHAR function converts a number or date to a string.将数字转换为日期或字符串 Syn ...
- JSP学习_02
JavaBean是特殊的Java类,使用Java语言编写,遵守JavaBean规范JavaBean同其他Java类一些独一无二的属性:拥有一个默认的构造函数需要被序列化并实现Serializable接 ...
- win10 64bit安装redis及redis desktop manager的方法
下载地址: MSOpenTech/redis——Github 下载后随便解压到一个地方 在 命令行 启动服务端 命令内容如下: redis-server.exe redis.windows.conf ...
- address sizes : 46 bits physical, 48 bits virtual
processor : 7vendor_id : GenuineIntelcpu family : 6model : 63model name : Intel(R) Xeon(R) CPU E5-26 ...
- 2018/04/04 每日一个Linux命令 之 ps
ps 用于查看系统内的进程状态. 这个命令比较重要,也比较长,会通过实践出常用的命令 -- 当我们敲下一个 ps 之后会发生什么? ubuntu@hong:~/nginx/sites-enabled$ ...
- nodejs(三)Buffer module & Byte Order
一.目录 ➤ Understanding why you need buffers in Node ➤ Creating a buffer from a string ➤ Converting a b ...
- sql server 存储机制
1.区段 区段(extent)是用来为表和索引分配空间的基本存储单元.它由8个连续的64KB数据页组成. 基于区段(而不是实际使用空间)分配空间的概念的要点: 一旦区段已满,那么下一记录将要占据的空间 ...
- MYSQL流程图
MYSQL流程图
- redis5.0主从配置
1.下载 wget http://download.redis.io/releases/redis-5.0.3.tar.gz .tar.gz cd redis- make make test //检查 ...