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/ ...
随机推荐
- frida 解决一些报错问题
遇到的一些问题 第一个问题 Unable to start: Error binding to address 127.0.0.1:27042: Address already in use 解决方法 ...
- MySQL Event Scheduler were found damaged
Navicat操作Mysql时报错信息:Cannot proceed because system tables used by Event Scheduler were found damaged ...
- Ping测试记录脚本
@echo off echo PingTest del PingTest_result.txt timeout /t 10 echo=> PingTest_result.txt :TEST ec ...
- C#从数据库中加载照片的
从数据库中读取人员照片信息并加载到图片控件的代码 string conn = "Server=192.168.xx.xx;Database=dbName;User ID=sa;passwor ...
- mysql异常处理的收集
今天在处理mysql的存储过程,判断游标是否到了结尾,结果让返回零行的一个查询触发了,随即从网上查阅资料收集异常异常处理. MySql错误处理(一)- SQL服务器模式 导言:MySql错误处理的基础 ...
- 用 C# 写一个 .NET 垃圾回收器(二)
用 C# 写一个 .NET 垃圾回收器(二) 在第一部分中,我们准备了项目,并修复了由 NativeAOT 工具链引起的初始化问题.在本部分,我们将开始实现自己的 GC(垃圾回收器).目前的目标是构建 ...
- 部署Palworld幻兽帕鲁服务器最佳实践(Ubuntu)
本文为您介绍Ubuntu系统部署Palworld幻兽帕鲁服务器的最/佳实践. 1.登录云主机控制台,选择创建云主机的资源池,点击"创建云主机"按钮. 2.基础配置. CPU架构选择 ...
- 解决ECharts官网打开缓慢的问题
本章我们将解决在Windows系统中打开ECharts官网缓慢的问题. 1.问题描述 正常情况下,我们在Windows环境中打开ECharts官网可能会遇到非常缓慢的情况,一直处于加载中,甚至打不开, ...
- presto解析jsonArr转多行
一.假数据解析 SELECT r1.col.dataSourceId, r1.col.database, r1.col.dataTable FROM (SELECT explode(r.json) A ...
- Springboot 在项目启动时将数据缓存到全局变量
有写字典数据不会频繁更新,但是会频繁查询,想要减少数据库链接次数,把内容缓存到项目的全局变量中,提高方法查询速度 import javax.annotation.PostConstruct; impo ...