MySQL 的 Doublewrite Buffer 是什么?它有什么作用?
MySQL 的 Doublewrite Buffer 是什么?它有什么作用?
Doublewrite Buffer 是 InnoDB 存储引擎的一种机制,旨在提高数据的安全性,防止在写入磁盘时发生崩溃导致数据损坏。它通过将数据先写入内存中的一个缓冲区,再写入磁盘,从而确保数据一致性。
Doublewrite Buffer 的工作原理
数据写入过程:
- 在写入数据时,InnoDB 会将数据首先写入 Doublewrite Buffer。这个缓冲区位于 InnoDB 的系统表空间(system tablespace)中,通常是在内存中的一个特殊区域。
- 数据在写入 Doublewrite Buffer 后,InnoDB 会将其从该缓冲区写入实际的磁盘数据文件(即
.ibd文件或表空间文件)。这个过程可以防止磁盘写入操作失败或崩溃时造成的数据损坏。
崩溃恢复机制:
- 如果数据库发生崩溃(如突然断电或系统崩溃),可能导致尚未完全写入磁盘的数据文件发生损坏。由于数据已经在 Doublewrite Buffer 中有一份完整的副本,InnoDB 在重启时可以使用这个副本进行恢复。
- Doublewrite Buffer 中的数据在写入磁盘时保证了原子性,这意味着即使在崩溃时,也不会有部分数据被写入,另一部分数据没有被写入的情况,从而防止了脏页和数据不一致的问题。
写入过程中的效率影响:
- 使用 Doublewrite Buffer 机制会带来一定的性能开销,因为每次写操作都需要经过两次写入(一次到缓冲区,第二次到磁盘)。
- 尽管如此,这种写入冗余是为保证数据的安全性而做出的折衷。
Doublewrite Buffer 的作用
防止数据损坏:
- Doublewrite Buffer 能有效防止磁盘写入时发生的故障造成数据损坏。即使系统崩溃,数据依然可以从 Doublewrite Buffer 中恢复。
保证数据一致性:
- 通过确保每次写操作的原子性,避免了部分数据写入成功、部分数据写入失败的情况,从而确保数据一致性。
提供崩溃恢复能力:
- 通过将写入操作先写入缓冲区,然后才写入磁盘,InnoDB 在数据库重启时能通过检查 Doublewrite Buffer 来恢复尚未完全写入磁盘的数据。
总结
- Doublewrite Buffer 是 InnoDB 提供的一种保护机制,用于保证数据写入过程中的安全性和一致性。
- 它通过将数据写入内存中的缓冲区,然后再写入磁盘,以此防止由于崩溃导致的数据损坏。
- 尽管它引入了一定的性能开销,但它大大提高了数据的可靠性和恢复能力,尤其是在系统崩溃后。
这种机制使得 MySQL 在面对硬件故障或系统崩溃时,能够在一定程度上恢复数据,确保数据库的可靠性和数据完整性。
MySQL 的 Doublewrite Buffer 是什么?它有什么作用?的更多相关文章
- MySQL Doublewrite Buffer及业务评估
1. 关于Doublewrite Buffe的总结 Doublewrite Buffer:Doublewrite Buffer出现的初衷是防止buffer pool中的脏页刷新到磁盘中,出现部分写的问 ...
- mysql 优化之 doublewrite buffer 机制
是什么? doublewrite buffer是mysql 系统表空间的一块存储区域. 有什么用? 在Innodb将数据页写到数据存储文件之前,存储从Innodb缓存池刷过来的数据页.且只有将数写入d ...
- InnoDB On-Disk Structures(四)--Doublewrite Buffer (转载)
转载.节选于 https://dev.mysql.com/doc/refman/8.0/en/innodb-doublewrite-buffer.html The doublewrite buffer ...
- php中mysql操作的buffer知识
php与mysql的连接有三种方式,mysql,mysqli,pdo.不管使用哪种方式进行连接,都有使用buffer和不使用buffer的区别. 什么叫使用buffer和不使用buffer呢? 客户端 ...
- mysql 原理 ~ change buffer
一 简介:今天咱们来聊聊mysql的change buffer二 详细说明 1 +-change Buffer和数据页一样,也是物理页的一个组成部分,数据结构也是一颗B+树,这棵B+树放在共享表空 ...
- MYSQL 优化--inner buffer 与关联查询变等值查询
转自:https://www.2cto.com/database/201312/262376.html 在数据库的应用中,我们经常需要对多表进行连表操作来获得关系型的数据,因此,应该更加的掌握好Mid ...
- 全网最清楚的:MySQL的insert buffer和change buffer 串讲
目录 一.前言 二.问题引入 2.1.聚簇索引 2.2.普通索引 三.change buffer存在的意义 四.再看change buffer 五.change buffer 的限制 六.change ...
- MySQL:change buffer
1. 概念 Innodb维护了一个缓存区域叫做Buffer Pool,用来缓存数据和索引在内存中.其大小通过参数 innodb_buffer_pool_size 控制: change buffer 是 ...
- mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用
添加的作用是:指定字符的编码.解码格式. 例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码.这时候如果添加了useUnicode=true&cha ...
- MySQL的BlackHole引擎在主从架构中的作用
MySQL在5.x系列提供了Blackhole引擎–“黑洞”. 其作用正如其名字一样:任何写入到此引擎的数据均会被丢弃掉, 不做实际存储:Select语句的内容永远是空. 和Linux中的 /dev/ ...
随机推荐
- LeetCode 力扣 205. 同构字符串
给定两个字符串 s 和 t ,判断它们是否是同构的. 如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的. 每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序.不同字 ...
- AGC043E
抄一下 https://www.luogu.com.cn/article/n32presk,写的非常好. 下面是要把问题转化为一个群论问题. 定义拓扑空间:全集 \(X\) 和它的一个子集族 \(T\ ...
- FLink16--计数窗口--CountWindiwApp
一.依赖 https://www.cnblogs.com/robots2/p/16048648.html 二.代码 概念:窗口来多少条计算一次,存在滚动和滑动两种情况 package net.xdcl ...
- tomcat配置用户名密码
1.配置tomcat-user.xml<role rolename="manager-gui"/><role rolename="manager-scr ...
- ATT&CK实战系列(一)
环境下载 下载靶场环境,并导入虚拟机分别是win2003.win7.winserver2008 配置网络 虚拟机--编辑--虚拟机网络编辑器--添加网络VMnet2--仅主机模式分配的地址是192.1 ...
- [开源自荐] Catime 不一样的计时器(番茄时钟),非常欢迎反馈
Catime 一款简洁的 Windows 倒计时工具,具有透明界面和丰富的自定义选项. Github:https://github.com/vladelaina/Catime 特点 极简设计: 透明界 ...
- Docker - 部署禅道
原文链接:https://mp.weixin.qq.com/s/8L0Rv6Wc0lFsQU6Lw0QloQ 简单的看了一下原文,他使用的是Ubuntu的操作系统,第一步的Docker安装相关命令 ...
- Keepalived学习,双机主备高可用
一.主机安装 1.解压 tar -zxvf keepalived-2.0.18.tar.gz 2.解压后进入到解压出来的目录,看到会有configure,那么就可以做配置了 3.使用configure ...
- 咨询公司:趁着AI人工智能的浪潮还能持续,好好享受吧……
在人工生成式智能热潮的喧嚣与狂热之中,咨询行业正经历一场基本未被察觉却极具变革性的革命,这场变革将塑造它的未来. 传统咨询依赖于由高素质专业人士组成的团队,他们专注于研究.数据分析,并提供定制化建议. ...
- 【ABAQUS Material】density 行为
1.overview 进行eigenfrequency . transient dynamic analysis. transient heat transfer analysis. adiabati ...