【DB吐槽大会】第11期 - FPW | Double Write

简介: 大家好,这里是DB吐槽大会,第11期 - FPW | Double Write

背景


1、产品的问题点

  • 检查点后第一次发生修改的PAGE需要将整个PAGE写入WAL日志.

2、问题点背后涉及的技术原理

  • 数据文件以block_size为单位组织存储, 为了防止数据文件出现block partial write, 例如一半页面是旧的内容, 一半页面是新的内容, 数据库设计了fpw的功能来恢复异常的数据block.

3、这个问题将影响哪些行业以及业务场景

  • 更新较为频繁、覆盖的更新数据分布散落在很广泛的PAGE内容的业务. 例如活跃用户较多的2C业务, 需要频繁更新用户状态信息.

4、会导致什么问题?

  • wal日志增多, 耗费更多的归档存储空间, 需要更多钱, 恢复时间也可能变长.
  • 性能下降.

5、业务上应该如何避免这个坑

  • 可以拉长checkpoint时间周期, 使得在一天内产生的fpw更少. 但是无法避免完全不写入full page.
  • 使用Copy on write的文件系统, 例如btrfs, zfs, 避免出现data block 出现prital write.
  • 文件系统对齐IO, 同时支持大于或等于data block size的原子写

6、业务上避免这个坑牺牲了什么, 会引入什么新的问题

  • 拉长checkpoint周期实际上就是让周期内的WAL日志更多, 从而会导致数据库崩溃恢复的时间变长, 发生H A切换、standby重启后、或者发生oom原地恢复、等需要恢复的场景, 影响业务的时间变长.
  • 使用copy on write的文件系统, 本质上时将问题转嫁给文件系统了. 并没有彻底解决问题.
  • 文件系统对齐IO的较少, 特别是云盘的情况, 还需要同时支持大于或等于data block size的原子写, 管理成本增加.

7、数据库未来产品迭代如何修复这个坑

  • 内核层支持: DIO, 并且硬件支持IO原子写对齐.
  • 或者使用remote recovery, 例如polardb for pg开源版本.



相关文章
|
存储 SQL 缓存
MySQL的Double Write并不难理解
今天为大家介绍一个新的名词:double write。 相信你还记得,我之前有写笔记跟大家分享过,在MySQL组织数据的基本单位是存在于磁盘上的数据页。数据页被读取到内存(Buffer Pool)中后被称为缓存页。默认情况下每个数据页的大小是16kb,数据页中存储的就是一行行真实的记录,也叫做数据行。
204 0
|
存储 关系型数据库 数据库
敲黑板:InnoDB的Double Write,你必须知道
InnoDB引擎有几个重点特性,为其带来了更好的性能和可靠性: - 插入缓冲(Insert Buffer) - 两次写(Double Write) - 自适应哈希索引(Adaptive Hash Index) - 异步IO(Async IO) - 刷新邻接页(Flush Neighbor Page)
|
存储 架构师 关系型数据库
double write buffer,你居然没听过?
double write buffer,不是一个内存buffer,是一个内存/磁盘两层的结构,是InnoDB里On-Disk架构里很重要的一部分; 是一个通过写两次,保证页完整性的机制。
518 0
double write buffer,你居然没听过?
|
关系型数据库 MySQL 数据库管理
|
Oracle 关系型数据库 MySQL
MySQL中的double write(二)(r12笔记第17天)
    MySQL里的double write是InnoDB的三大闪亮特性,另外两个是insert buffer 和自适应哈希,其实还有几个比如异步IO,Flush neighbour Page(刷新邻接页),这个和系统层面的关联性较高,所以三大亮点还是更有针对性的。
1296 0
|
关系型数据库 MySQL
|
关系型数据库 MySQL 存储
MySQL之Double Write Buffer分析
之前有阅读过相关的文档和资料,总归差了点意思,这次抽出时间仔细推敲了一下,把一些结果记录下来; 杨大师的博文给了很大的帮助:http://blog.itpub.net/22664653/viewspace-1140915/-----------------------...
1412 0
|
缓存 监控 Oracle
MySQL的double write和Oracle对比学习
之前有网友希望我对mysql的double write和oracle能够做一个对比,其实这种对比方式挺好,能够触类旁通,举一反三。不过限于本人水平有限,欢迎拍砖。 关于MySQL的double write是对partilal write的一个补充。
1902 0