InnoDB特性之-两次写
来源:互联网 发布:煤炭进出口数据 编辑:程序博客网 时间:2024/06/05 18:56
如果说插入缓冲是为了提高写性能的话,那么两次写是为了提高可靠性,牺牲了一点点写性能。
部分写失效
想象这么一个场景,当数据库正在从内存向磁盘写一个数据页时,数据库宕机,从而导致这个页只写了部分数据,这就是部分写失效,它会导致数据丢失。这时是无法通过重做日志恢复的,因为重做日志记录的是对页的物理修改,如果页本身已经损坏,重做日志也无能为力。
两次写机制
从上面分析我们知道,在部分写失效的情况下,我们在应用重做日志之前,需要原始页的一个副本,两次写就是为了解决这个问题,下面是它的原理图:
两次写需要额外添加两个部分:
1)内存中的两次写缓冲(doublewrite buffer),大小为2MB
2)磁盘上共享表空间中连续的128页,大小也为2MB
其原理是这样的:
1)当刷新缓冲池脏页时,并不直接写到数据文件中,而是先拷贝至内存中的两次写缓冲区。
2)接着从两次写缓冲区分两次写入磁盘共享表空间中,每次写入1MB
3)待第2步完成后,再将两次写缓冲区写入数据文件
这样就可以解决上文提到的部分写失效的问题,因为在磁盘共享表空间中已有数据页副本拷贝,如果数据库在页写入数据文件的过程中宕机,在实例恢复时,可以从共享表空间中找到该页副本,将其拷贝覆盖原有的数据页,再应用重做日志即可。
其中第2步是额外的性能开销,但由于磁盘共享表空间是连续的,因此开销不是很大。可以通过参数skip_innodb_doublewrite禁用两次写功能,默认是开启的,强烈建议开启该功能。
0 0
- InnoDB特性之-两次写
- [MySQL] InnoDB三大特性之 - 两次写
- [MySQL] InnoDB三大特性之 - 两次写
- InnoDB存储引擎——两次写
- InnoDB存储引擎之InnoDB关键特性
- InnoDB关键特性之doublewrite
- mysql之innodb存储引擎特性汇总
- InnoDB关键特性之double write
- InnoDB关键特性之自适应hash索引
- InnoDB关键特性之change buffer
- InnoDB关键特性之double write
- InnoDB关键特性之自适应hash索引
- InnoDB关键特性之double write
- InnoDB关键特性之Insert buffer
- 两次写
- 转载一篇很优秀的介绍innodb的两次写的文章
- [MySQL] InnoDB三大特性之 - 插入缓冲
- [MySQL] InnoDB三大特性之 - 自适应哈希索引
- mysql设置远程访问数据库的多种方法
- Hadoop2.5+HA+zk3.4.6集群搭建
- Spark-1.4.1+MLlib的安装和搭建
- sqlite3编绎
- Android 超高仿微信图片选择器 图片该这么加载
- InnoDB特性之-两次写
- 图像的阈值分割(迭代法选择阈值)
- 工作经验应该这么写,有模板哦!
- AT&T计划削减支出 SDN头功
- Java初学项目------满汉楼:工具栏+菜单栏
- HDU 5296 Annoying problem
- django 1.8 官方文档翻译: 3-4-2 内建显示视图
- 最小费用最大流模板
- 软件工程的七条基本原则