InnoDB存储引擎有三大特性非常令人激动,它们分别是插入缓冲、两次写和自适应哈希

innodb 关键特性其中之二
写缓存是为了提升写性能,两次写为了提升可靠性
change buffer
innodb引擎是索引组织表,所有记录都放在聚集索引里,因此其辅助索引中的记录地址存放的主键的键值。
它是一种特殊的数据结构,缓存对二级索引页面的更改并且这些页面不在buffer pool中。缓存的changes可能由insert、delete和update 的结果导致。稍后在页面被其他读取操作加载到 buffer pool 的时候合并。
简言之:change buffer 的主要目的是将对二级索引的数据操作缓存下来,以此减少二级索引的随机IO,并达到操作合并的效果。
写缓冲的目的是降低写操作的磁盘IO,提升数据库性能。

它是一种应用在非唯一普通索引(二级索引)页不在缓冲池中,对页进行了写操作,并不会立即将磁盘页加载到缓冲池,而仅仅记录缓冲变更(buffer changes)缓存到 ibdata里的一个btree (ibuf),等未来数据被读取时,再将数据合并(merge)恢复到缓冲池中的技术。写缓冲的目的是降低写操作的磁盘IO,提升数据性能。

加入写缓冲优化后,流程优化为:

(1)在写缓冲中记录这个操作,一次内存操作;

(2)写入redo log,一次磁盘顺序写操作;

其性能与,这个索引页在缓冲池中,相近。

画外音:可以看到,40这一页,并没有加载到缓冲池中。

什么时候适合使用写缓冲,如果:

(1)数据库大部分是非唯一索引;

(2)业务是写多读少,或者不是写后立刻读取;

可以使用写缓冲,将原本每次写入都需要进行磁盘IO的SQL,优化定期批量写磁盘。
相关参数
参数:innodb_change_buffer_max_size
介绍:配置写缓冲的大小,占整个缓冲池的比例,默认值是25%,最大值是50%。
画外音:写多读少的业务,才需要调大这个值,读多写少的业务,25%其实也多了。
参数:innodb_change_buffering
介绍:配置哪些写操作启用写缓冲,可以设置成all/none/inserts/deletes等。

change buffer 是innodb的一种特殊结构,其本质上是一棵存在于ibdata的btree.当修改用户表空间的二级索引页时,如果对应的page不在内存中,该操作将可能被记录到change buffer中,从而减少了二级索引的随机io.并达到了合并更新的效果。
随后当对应的page被读入内存时,会进行一次merge操作;后台master线程也会定期发起merge.

当需要更新一个数据页时,如果数据页在内存中就直接更新;而如果这个数据页还没有在内存中的话,在不影响数据一致性的前提下,InnoDB 会将这些更新操作缓存在 change buffer 中。

这样就不需要从磁盘中读入这个数据页了,在下次查询需要访问这个数据页的时候,将数据页读入内存,然后执行 change buffer 中与这个页有关的操作。通过这种方式就能保证这个数据逻辑的正确性。

注意唯一索引的更新就不能使用 change buffer,实际上也只有普通索引可以使用。

适用场景:

  • 对于写多读少的业务来说,页面在写完以后马上被访问到的概率比较小,此时 change buffer 的使用效果最好。这种业务模型常见的就是账单类、日志类的系统。

  • 反过来,假设一个业务的更新模式是写入之后马上会做查询,那么即使满足了条件,将更新先记录在 change buffer,但之后由于马上要访问这个数据页,会立即触发 merge 过程。这样随机访问 IO 的次数不会减少,反而增加了 change buffer 的维护代价。

double write buffer
doublewrite(两次写)
简单说,就是在写数据页(块)之前,先把这个数据页写到一块独立的物理文件位置(ibdata),然后再写到数据页。这样在宕机重启时,如果出现数据页损坏,那么在应用redo log之前,需要通过该页的副本来还原该页,然后再进行redo log重做,这就是 double write.
MySQL有很强的数据安全性机制:
(1)在异常崩溃时,如果不出现“页数据损坏”,能够通过redo恢复数据;
(2)在出现“页数据损坏”时,能够通过double write buffer恢复页数据;
double write buffer:
(1)不是⼀个内存buffer,是⼀个内存/磁盘两层的结构,是InnoDB⾥On-Disk架构⾥很重要的⼀部分;(2)是⼀个通过写两次,保证页完整性的机制;

InnoDB存储引擎有三大特性相关推荐

  1. MySQL :InnoDB 存储引擎(lnnoDB 关键特性)

    asdsInnoDB 是事务安全的MySQL 存储引擎,设计上采用了类似于Oracle 数据库的架构.通常来说, InnoDB 存储引擎是OLTP应用中核心表的首选存储引擎.同时,也正是因为InnoD ...

  2. linux mysql innodb_MySQL innoDB 存储引擎学习篇

    master thread的县城优先级别最高.其内部由几个循环(loop)组成:主循环(loop).后台循环(background loop).刷新循环(flush loop).暂停循环(suspen ...

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

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

  4. InnoDB存储引擎详解

    存储引擎是 MySQL 中具体与文件打交道的子系统,它是根据 MySQL AB 公司提供的文件访问层抽象接口定制的一种文件访问机制,这种机制就叫作存储引擎 . 文章目录 InnoDB存储引擎架构 实例 ...

  5. MySQL技术内幕(一) InnoDB存储引擎

    文章目录 1. InnoDB 体系架构 1.1 后台线程 1.2 内存 1.3 Checkpoint 技术 1.5 Master Thread 工作方式 1.6 InnoDB 关键特性 1.6.1 插 ...

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

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

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

    MySQL技术内幕-InnoDB存储引擎第2版-学习笔记-02 6. 锁 ​ 人们认为行级锁总会增加开销.实际上,只有当实现本身会增加开销时,行级锁才会增加开销.InnoDB 存储引擎不需要锁升级,因 ...

  8. MySQL技术内幕 InnoDB存储引擎——第2章 InnoDB存储引擎(未完待续)

    第2章 InnoDB存储引擎 2.1 InnoDB存储引擎概述 InnoDB存储引擎是第一个完整支持ACID事务的MySQL存储引擎(BDB是第一个支持事务的MySQL存储引擎,现在已经停止开发). ...

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

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

  10. Innodb存储引擎的特性(2)

    关于锁还有两个被经常提到的概念,就是阻塞和死锁,我发现开发人员会经常混淆,两种错误,所以我觉得有必要在这里强调一下,两个锁的问题,首先什么是阻塞呢,阻塞是因为不同锁的兼容性的关系,在有些时刻,一个事务 ...

最新文章

  1. ==和equals的简单比较
  2. 一、如何创建一个状态栏扩展(火狐插件扩展开发教程)
  3. 机器真的已经战胜人类医生了吗?医学AI标题党文章中的三大陷阱
  4. 《机器学习实战》笔记(04):基于概率论的分类方法 - 朴素贝叶斯分类
  5. 实现单词大小写不敏感的正则表达式的匹配!
  6. Windows Live Messenger 2011,离线安装、多开、去广告……
  7. 控制图的绘制步骤_实战!脚手架排布图绘制步骤和技巧讲解!图文展示
  8. Android——控件显示和隐藏
  9. 简单版俄罗斯方块程序代码c语言,俄罗斯方块C语言程序代码.DOC
  10. windows7系统如何实现AirPrint打印
  11. SDK接入学习(一):PlayerSetting详解(PC、Mac、Linux)
  12. JAVA能写大型游戏么?
  13. P1538 迎春舞会之数字舞蹈
  14. 怎么给领导做项目汇报
  15. mysql级联删除_近百道MySQL面试题和答案(2020收藏版)(完结篇)
  16. 切图教程,app切图命名总结
  17. 大学十年__献给计算机专业的所有学子
  18. 网络安全与渗透:xss 跨站脚本攻击(十二)此生无悔入华夏,男儿何不带吴钩
  19. laravel安装的几种方法总结
  20. PIL/Image的show()函数

热门文章

  1. 使用Xftp连接Linux
  2. linux控制pwm输出个数,使用PWM控制来实现电压的变化控制
  3. 3 EDA技术实用教程 【基础知识1】
  4. C/C++教程 第十二章 —— MFC的基本使用
  5. 【EI会议推荐】机电一体化、自动化与智能控制领域
  6. matlab炮灰模型,非诚勿扰的数学分析
  7. html怎么添加自动关机,按键精灵怎样设置自动关机
  8. Fiddler4安装与配置_偷懒的肥猫
  9. JQuery函数的作用
  10. Ubuntu18.04 Xfce桌面环境配置中文输入法