MySQL的double write和Oracle对比学习

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介: 之前有网友希望我对mysql的double write和oracle能够做一个对比,其实这种对比方式挺好,能够触类旁通,举一反三。不过限于本人水平有限,欢迎拍砖。 关于MySQL的double write是对partilal write的一个补充。
之前有网友希望我对mysql的double write和oracle能够做一个对比,其实这种对比方式挺好,能够触类旁通,举一反三。不过限于本人水平有限,欢迎拍砖。
关于MySQL的double write是对partilal write的一个补充。比如将数据写入磁盘的时候,发生了断电情况,那么一部分内容写入一部分就丢失了,这个时候使用redo log来恢复就不可行了,因为从日志文件层面数据的变更已经是不完整的了。


double write的大体是这样的。部分内容参考了链接 http://www.cnblogs.com/benshan/archive/2013/01/14/2859336.html
double write分为两部分,一部分是doublewrite buffer,大小为2M,另外一部分就是物理磁盘上的共享表空间中连续的128个页,即两个区,大小同样为2M。当缓冲池的胀业刷新时,并不直接写硬 盘,而是通过memcpy函数将脏页先拷贝到内存中的doublewrite buffer,之后通过doublewrite buffer再分两次写,每次写入1M到共享表空间的物理磁盘上,然后马上调用fsync函数,同步磁盘。

这个问题可以简单的归结为innodb恢复的原理,从这个层面来说和oracle还是存在着很大的不同。
首先double write是限于Innodb 存储引擎的,而且是作为一个可选的方案,通过参数InnoDB_doublewrite的值来控制,如果为0表示不启用,可以通过show status like  "%InnoDB_dblwr%"来查看。
既然作为可选方案,肯定是有一定的原因,就是出于性能的考虑,位于共享表空间的double write buffer其实也是文件,写double write buffer本身也会有fsync操作,只是double write写入的过程是一个顺序写的过程,所以对性能降低不会太低。

oracle的恢复机制相比double wriite更加灵活和全面。
首先oracle中采用了undo+redo机制来作为数据恢复的基石,数据的恢复是通过前后台结合来实现的,在缓存级别,存在dbwr,能够把修改后的数据块刷入数据文件,这是一个异步的过程,不会因为发生数据变更就马上写入数据文件,同时存在log buffer,能够通过log buffer生成redo日志,最后通过lgwr把这部分变更刷到redo 日志,在这个过程中lgwr负责了保持数据完整性的任务,保证了数据在任何情况下都不会丢失。
上面的操作,写入数据文件的过程不是实时的,可以存在一定的延时,所以重点就放在了redo日志上面,在备份恢复方面还是最重要的。
如果在dbwr把数据变更的数据块写入数据文件的时候,如果发生断电的情况,当实例重新启动的时候,oracle会根据redo 日志构造出变更前的数据块信息,从而完成了前滚,把丢失的数据块找回来。这样数据库就恢复为了奔溃前的状态,如果某些事务没有提交或者回滚,又会继续做一个回滚操作。这个过程会通过smon来结合Undo来实现。
从整个过程来说,oracle支持的面很广,就如Oracle所承诺的那样,做了commit的数据就能够恢复。从IO消耗的角度来看,物理IO的消耗就在于刷新数据到数据文件,数据变更写入redo,没有额外的物理IO。

结合MySQL来看,double write buffer扮演的角色有点类似 log buffer的作用。因为oracle已经开辟了log buffer的缓存空间,所以缓存级的IO还是很快的,double write buffer就会存在部分的物理IO操作。
不过从技术的架构和角度来看,不能完全说出某一种好还是不好,从目前的分析来看,oracle相比double write还是技高一筹,不过从体系结构上要复杂的多。而且还涉及到更多的细节需要优化。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 存储 关系型数据库
【MySQL 数据库】11、学习 MySQL 中的【锁】
【MySQL 数据库】11、学习 MySQL 中的【锁】
76 0
|
存储 关系型数据库 MySQL
|
1月前
|
SQL 关系型数据库 MySQL
【MySQL 数据库】4、MySQL 事务学习
【MySQL 数据库】4、MySQL 事务学习
44 0
|
12天前
|
SQL 存储 关系型数据库
6本值得推荐的MySQL学习书籍
本文是关于MySQL学习书籍的推荐,作者在DotNetGuide技术社区和微信公众号收到读者请求后,精选了6本值得阅读的MySQL书籍,包括《SQL学习指南(第3版)》、《MySQL是怎样使用的:快速入门MySQL》、《MySQL是怎样运行的:从根儿上理解MySQL》、《深入浅出MySQL:数据库开发、优化与管理维护(第3版)》以及《高性能MySQL(第4版)》和《MySQL技术内幕InnoDB存储引擎(第2版)》。此外,还有12本免费书籍的赠送活动,涵盖《SQL学习指南》、《MySQL是怎样使用的》等,赠书活动有效期至2024年4月9日。
|
17天前
|
SQL 关系型数据库 MySQL
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
轻松入门MySQL:深入学习数据库表管理,创建、修改、约束、建议与性能优化(3)
|
存储 SQL 关系型数据库
|
26天前
|
Oracle 关系型数据库 MySQL
Seata常见问题之oracle 数据库 报 just support mysql如何解决
Seata 是一个开源的分布式事务解决方案,旨在提供高效且简单的事务协调机制,以解决微服务架构下跨服务调用(分布式场景)的一致性问题。以下是Seata常见问题的一个合集
53 0
|
1月前
|
存储 SQL 关系型数据库
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
【MySQL 数据库】6、一篇文章学习【索引知识】,提高大数据量的查询效率【文末送书】
56 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库学习(小白一文掌握Mysql)
MySQL数据库学习(小白一文掌握Mysql)
42 0

推荐镜像

更多