首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >innodb为什么需要double write?

innodb为什么需要double write?

作者头像
十毛
发布2021-02-02 15:44:57
1.2K0
发布2021-02-02 15:44:57
举报

最近研究innodb的数据一致性,其中提到为了解决写磁盘的时候可能发生的页分裂,innodb使用了double write技术,因为redo log本身并不能恢复分裂的页

什么是页分裂(partial page write)

因为Innodb的数据页一般是16K,但是磁盘的页一般是4K,所以写一次磁盘数据,会有4次写磁盘的原子操作,在极端情况下就可能在磁盘写完前面4K后系统断点,此时4K是新数据,后面的12K是老数据,出现了数据被破坏的情况,这就叫做页分裂

疑问

  • 《MySQL技术内幕:InnoDB存储引擎(第2版》和《MySQL实战45讲》中都说redo log是物理日志,具有幂等性。那么innodb可以无视目标页的当前状态(是否分裂),都可以用物理的方式幂等恢复完整的页数据(物理操作一般是类似于SET操作)。为什么还需要额外使用double write技术呢?
  • 如果redo log不是幂等的,那在redo log应用到一半的时候,系统崩溃,innodb又如何完成崩溃恢复呢?

答案

google了好久,遇到了有相同疑问的同学

因为redo是物理逻辑结合型的日志。物理到具体的哪个page,页里面是逻辑的。这种方式既实现了物理日志带来的幂等性(以物理页为整体),又拥有逻辑日志带来的轻量性(物理页内修改是逻辑日志)。所以物理页内修改不是幂等的,需要使用double write技术来保证写入的成功

参考

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 什么是页分裂(partial page write)
  • 疑问
  • 答案
  • 参考
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档