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/ ...
随机推荐
- Kotlin:【异常处理】自定义异常、先决条件函数
- 第4章 C#的高级特性
第4章 C#的高级特性 4.1 委托 4.1.2 多播委托 对值为 null 的委托变量进行 + 或 += 操作,等价于为变量指定一个新值: SomeDelegate d = null; d += ...
- 浅说TCP状态机制
本文分享自天翼云开发者社区<浅说TCP状态机制>,作者:云云生息 TCP(Transmission Control Protocol)是一种面向连接的.可靠的传输协议,常用于互联网中应用层 ...
- wsgi服务器
wsgi服务器DRP原则:Don't repeat yourself1.wsgi接口:全称 Web Server Gateway Interface (web服务器网关接口) 请求:request 响 ...
- Q:查看锁表进程,及杀死所有锁表进程sql
查看锁表进程 SELECT DISTINCT decode(s.inst_id, 1, 'DB1', 2, 'DB2') 数据库服务器, decode(s.BLOCKING_SESSION, '', ...
- ORACLE 分页排序后的数据重复或缺失问题
今天一大早业务人员就反映说用户导出的订单数据,有好几单是重复,并且缺失了某一单. 第一步:查询数据表.表里实际数据没有重复,也没有缺失.那么就可能是导出过程出错了(因为是异步分页导出,所以最先怀疑这部 ...
- .Net Core WebAPI部署多服务器配置Nginx负载均衡
下载Nginx包: https://nginx.org/en/download.html 首先下载Nginx包 注意:下载路径必须为英文,不能到中文: 启动Nginx: 打开刚刚下载的Nginx包,然 ...
- 使用FishSpeech进行语音合成推理
部署 部署FishSpeech,优先参考github官方(https://speech.fish.audio/zh/). 注意:此网站可能需要FQ才能访问. 个人为Windows电脑,使用Wind ...
- Python异步编程进阶指南:破解高并发系统的七重封印
title: Python异步编程进阶指南:破解高并发系统的七重封印 date: 2025/2/25 updated: 2025/2/25 author: cmdragon excerpt: 本文是异 ...
- 腾讯地图web端请求报错113.该功能未授权
问题描述: 请求地址:https://apis.map.qq.com/jsapi?qt=geoc&addr=%2C%2C%2C&key=你的key&output=jsonp&a ...