InnoDB

该存储引擎是第一个完整支持ACID事务的MySql存储引擎,其特点是行锁设计、支持MVCC、支持外键,提供一次性非锁定读,同时被设计用来最有效地利用以及使用内存和CPU

InnoDB体系结构

InnoDB存储引擎是多线程的模型,因此其后台有多个不同的后台

Master Thread
Master Thread是一个非常核心的后台线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据一致性,包括脏页的刷新、合并插入缓冲,undo页的回收等。

IO Thread
负责IO请求的回调处理。分别是write 、read、insert buffer 和log thread

Purge Thread
事务被提交后,其所使用的undo log可能不在需要,因此需要Purge Thread来回收已经使用并分配的undo页。
从InnoDB 1.2版本开始,InnoDB 支持多个Purge Thread ,这样做的目的是为了进一步加快undo页的回收。同时由于Purge Thread 需要离散地读取undo页,这样也能更进一步利用磁盘的随机读取性能

内存

缓冲池

InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。
缓冲池简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库的印象,在数据库进行读取页的操作,首先将磁盘读到的页存放在缓冲池中,这个过程称为将页“FIX”在缓冲池中。下一次再读相同的页时,首先判断该页是否在缓冲池中。若在缓冲池中,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘上的页。

对于数据库中页的修改操作,则首先修改在缓冲池中的页,然后再以一定的频率刷新到磁盘上这里需要注意的是,页从缓冲池刷新回磁盘的操作并不是在每次页发生更新时触发,而是通过一种称为Checkpoint 的机制刷新回磁盘。同样,这也是为了提高数据库的整体性能。综上所述,缓冲池的大小直接影响着数据库的整体性能。由于32位操作系统的限制,在该系统下最多将该值设置为3G此外用户可以打开操作系统的PAE选项来获得32位操作系统下最大64GB内存的支持。随着内存技术的不断成熟,其成本也在不断下降。单条8GB的内存变得非常普遍,而PC服务器已经能支持512GB的内存。因此为了让数据库使用更多的内存,强烈建议数据库服务器都采用64位的操作系统。

Innodb存储引擎LRU淘汰算法

在innodb存储引擎中,缓冲池中页的大小默认为16KB,同时使用LRU算法对缓冲池进行管理。稍有不同是InnoDB存储引擎对传统的LRU算法做了一些优化。在InnoDB 的存储引擎中,LRU列表中还加入了midpoint 位置。

新读取的页虽然是最新访问的页但并不是直接放在LRU首部,而是放入到LRU列表的midpoint位置。这个算法在innodb存储引擎下称为midpoint
insertion strategy 。在默认配置下,该位置在LRU列表的5/8处。midpoint 位置可由参数innodb
_old_blocks pct 控制。在innodb存储引擎中,把midpoint之后的列表称为old列表,之前的称为new列表。可以简单的理解为new列表中的页都是最为活跃的热点数据。

那为什么不采取朴素的LRU算法,直接将读取的页放入到LRU列表的首部呢?这是因为若直接将读取到的页放入到LRU的首部,那么某些SQL操作可能会使缓冲池中的页被刷新出,从而影响缓冲池的效率。常见的这类操作为索引或数据的扫描操作。这类操作需要访问表中的许多页,甚至是全部的页,而这些页通常来说又仅在这次查询操作中需要,并不是活跃的热点数据。如果页被放入LRU列表的首部,那么非常可能将所需要的热点数据页从LRU列表中移除,而在下一次需要读取该页时,InnoDB
存储引擎需要再次访问磁盘。为了解决这个问题,InnoDB 存储引擎引入了另一个参数来进一步管理LRU列表,这个参数是innodb_old
_blocks_time ,用于表示页读取到mid位置后需要等待多久才会被加入到LRU列表的热端。

InnoDB存储引擎 随记相关推荐

  1. mysql+如何开发存储引擎_干货!MySQL 的 InnoDB 存储引擎是怎么设计的?

    MySQL 里还有什么其他成员呢? 对于 MySQL,要记住.或者要放在你随时可以找到的地方的两张图,一张是 MySQL 架构图,另一张则是 InnoDB 架构图: 遇到问题,或者学习到新知识点时,就 ...

  2. 诸葛io的技术架构图_【总结】MySQL技术内幕二:InnoDB存储引擎技术特性

    二.InnoDB存储引擎 InnoDB是事务安全的MySQL存储引擎,通常是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoDB的存在,才使MySQL数据库变得更有魅力. 从MySQL 5 ...

  3. MySQL InnoDB存储引擎

    呵呵哒... MySQL体系结构和存储引擎 首先要搞懂的是什么是数据库,什么是数据库实例. 数据库:物理操作系统文件或其他形式文件类型的集合. 实例:MySQL数据库由后台线程以及一个共享内存区组成, ...

  4. 不同存储结构的文件磁盘io操作次数_MySQL InnoDB存储引擎

    第1章 MySQL体系结构和存储引擎 1.1数据库和实例 数据库:物理操作系统文件或其他形式文件类型的集合.实例:MySQL数据库由后台线程以及一个共享内存区组成.共享内存可以被运行 的后台线程所共享 ...

  5. 宋利兵 mysql_MySQL数据库InnoDB存储引擎Log漫游(3)

    做者:宋利兵html 来源:MySQL代码研究(mysqlcode)mysql 0.导读 本文重点介绍了InnoDB的checkpoint和Buffer Pool管理算法 04 – Checkpoin ...

  6. 3、InnoDB存储引擎

    一.InnoDB体系架构 InnoDB存储引擎有多个内存块,这些内存块组成了一个大的内存池.后台线程主要负责刷新内存池中的数据.将已修改的数据刷新到磁盘. 1.1 后台线程 InnoDB后台有多个不同 ...

  7. 《MySQL技术内幕:InnoDB存储引擎》第2版笔记

    第1章 MySQL体系结构和存储引擎 1.1 定义数据库和实例 在MySQL数据库中,数据库文件可以是fm.MYD.MYI.ibd结尾的文件. MySQL数据库由后台线程以及一个共享内存区组成. My ...

  8. 1009MySQL数据库InnoDB存储引擎Log漫游

    00 – Undo Log Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC). - 事务的原子性(Atom ...

  9. MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-01 1. MySQL体系结构和存储引擎 1.1 定义数据库和实例 数据库database: 物理操作系统文件或其他形式文件类型的集合. 当使 ...

最新文章

  1. 自定义View实现图片的绘制、旋转、缩放
  2. JNI学习开始篇 基础知识 数据映射及学习资料收集
  3. windows添加删除静态路由
  4. AB1601移植二维码编码库注意事项
  5. 【转】C#中StreamWriter与BinaryWriter的区别兼谈编码。
  6. 关于Linux环境变量
  7. 10个优质的Java练手项目
  8. Qt 中利用 GNU barcode 生成一维条形码
  9. 基于CY7C68013A usb转mdio win10 64bit
  10. 如何用Python设计一个简易的文本敏感词过滤器
  11. 基带传输、频带传输与宽带传输
  12. 三重积分的球面坐标系的体积元素表示
  13. aria- 标签 html,HTML5教程 如何使用ARIA
  14. 最牛逼的Java编辑器,没有之一!
  15. Element快速入门
  16. 锐龙 5 7600X 和锐龙 5 7600区别 r57600X 和r57600对比
  17. html select 样式t调整_css修改html select下拉框样式(含右边箭头)
  18. C语言:静态数组动态数组
  19. 电脑入门的学习方法和技巧
  20. 用计算机获取信息,学会用CMD命令获取计算机的所有信息,菜鸟头衔马上崩塌

热门文章

  1. 随机点名器(java基础)
  2. Source Insight是一个面向项目开发的程序编辑器和代码浏览器丨产品简介
  3. Fabric交易流程
  4. 在红帽linux创建目录,redhat linux建文件系统
  5. ntohs, ntohl, htons,htonl inet_aton等详解
  6. yolov5模型训练流程
  7. 集成google webview(android.7.1)
  8. 【真题分享】2021京东春招java开发面试
  9. python过滤敏感词记录
  10. 按位取反的概念和计算方法