MySQL的Innodb doublewrite buffer来龙去脉

Innodb之Doublewrite Buffer 在某些情况下,当数据库系统正在写入一个数据页到磁盘的过程中发生崩溃,可能会导致该页只写入了一部分,从而损坏了页的内容。双写缓冲区提供了一个中间层,确保每个数据页在写入其最终位置之前,在一个单独的位置(即双写缓冲区)有一个完整的副本。因为崩溃导致的数据页的部分写损坏,而需要双写缓冲区(Doublewrite Buffer)这个问题的核心在于理解重做日志和数据页写入过程的不同目的和机制。重做日志的主要功能是记录事务对数据库所作的修改,确保这些修改可以在数据库崩溃后被重新应用(重放)以保持数据的一致性和完整性。 阅读详情

分类: Mysql/postgreSQL

                             MySQL的Innodb doublewrite buffer来龙去脉

     乍一看文档上写的Innodb有个doublewrite buffer,从我们dba的角度一下认为可能是一块内存区域
用来存放某种缓存的数据类型.但是恰恰这个doublewrite buffer是一种比较特殊的buffer,事实上这个buffer
并不是一块内存区域,而是存放在表空间中或是单独指定的某个文件中的一个buffer.

    我们来看os写文件的写机制, 在mysql中,每次写数据(仅数据文件)到磁盘中的时候是以page作为单位的.
一般都是采用的是16KB大小,可以在数据库初始化的时候使用innodb_page_size来定义.

mysql> show global variables like '%innodb_page_size%';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| innodb_page_size | 16384 |
+------------------+-------+
1 row in set (0.00 sec)

   而在os级别写文件是以4KB作为单位的,那么每写一个innodb的page到磁盘上,在os级别上需要写4个块.通过以下
命令可以查看文件系统的块大小.

[root@localhost ~]# dumpe2fs /dev/sda7 | grep "Block size"
dumpe2fs 1.39 (29-May-2006)
Block size:               4096


  当mysql在写一个innodb page到磁盘上时,如果在写这个page的过程中发生了意外的事件,比如断电,mysql崩溃等
就会使这个page数据出现不一样的情形.从而形成一个"断裂"的page.使数据产生混乱.这个时候innodb对这种块错误错误是无
能为力的.


  通过引入doublewrite buffer的方案,每次innodb在准备写出一个page时,先把page写到doublewrite buffer中.如果在写
doublewrite buffer时,发生了意外,但是数据文件中的原来的page不受影响,这样在下次启动时,可以通过innodb的redolog
进行恢复.如果在写doublewrite buffer成功后,mysql会把doublewrite buffer的内容写到数据文件中,如果在这个过程又出现了
意外,没有关系,重启后mysql可以通过从doublewrite buffer找到好的page,再用该好的page去覆盖磁盘上坏的page即可.

   所以在正常的情况下,mysql写数据page时,会写两遍到磁盘上,第一遍是写到doublewrite buffer,第二遍是从doublewrite buffer
写到真正的数据文件中.

   在某些情况下可以关闭doublewrite buffer,从而提高性能,比如比较稳定的系统中,有比较好的主从备份等.
主要的控制参数如下:

mysql> show global variables like '%innodb_doublewrite%';
+-------------------------+-------+
| Variable_name           | Value |
+-------------------------+-------+
| innodb_doublewrite      | ON    |
| innodb_doublewrite_file |       |
+-------------------------+-------+
2 rows in set (0.00 sec)

innodb_doublewrite 控制是否开启doublewrite ,默认是on;innodb_doublewrite_file定义doublewrite存放的位置,如果不定
义就会存放系统表空间中.

2023年全国职业院校技能大赛高职组“区块链技术应用”赛项赛卷(3卷)解析 我们先绘制题组中所有设计图我这边作图用的国内的在线作图工具。 阅读详情

相关推荐

大数据领域数据建模的多源数据融合技术

在大数据时代,数据来源呈现出多样化的特点,包括企业内部的不同业务系统数据、外部的社交媒体数据、传感器数据等。这些多源数据蕴含着丰富的信息,但由于数据格式、语义、质量等方面的差异,难以直接进行分析和利用。多源数据融合技术的目的就是将这些来自不同数据源的数据进行整合、清洗、关联和统一,构建一个具有一致性和完整性的数据模型,以便更好地挖掘数据背后的价值,为企业决策、科学研究等提供有力支持。

Java大师兄的博客 1306

MySQL innodb引擎架构分析- Double Write Buffer

MySQL的buffer一页的大小是16K,文件系统一页的大小是4K,也就是说,MySQL将buffer中一页数据刷入磁盘,要写4个文件系统里的页。MySQL内的页准备刷入磁盘,才刷了3个文件系统里的页,掉电重启后,物理上只有磁盘上的123页,数据完整性被破坏。如果能有一个“副本”,对原来的页进行还原,就能解决这类“页数据损坏”的问题,在MySQL中就是Double Write Buffer。Redo Log无法修复这类“页数据损坏”的异常,修复的前提是“页数据正确.”并且Redo Log日志正常。

梦里蓝天 703

告别零碎资料!手把手教你搞定ASTER L1T数据的预处理全流程(附ENVI实操)

本文详细介绍了ASTER L1T数据的预处理全流程,包括数据获取、质量检查、ENVI实操步骤(辐射定标、大气校正、几何精校正)以及热红外波段深度处理。特别适合地信领域初学者和研究人员,帮助快速掌握ASTER L1T数据处理技巧,提升定量反演研究效率。

weixin_30385925的博客 356

mysql innodb_doublewrite_MySQL的Innodb doublewrite buffer来龙去脉

MySQL的Innodb doublewrite buffer来龙去脉乍一看文档上写的Innodb有个doublewrite buffer,从我们dba的角度一下认为可能是一块内存区域用来存放某种缓存的数据类型.但是恰恰这个doublewrite buffer是一种比较特殊的buffer,事实上这个buffer并不是一块内存区域,而是存放在表空间中或是单独指定的某个文件中的一个buffer.我们来...

weixin_39866874的博客 198

ODS 与模态分析

模态分析不是通过现有的 FRF 来“推测”或“估计”其他模态参数,而是通过测量和分析 FRF 来。

轩辕霸天L 1261

更换光猫的原理与方法

当你给装维打电话说你需要更换光猫时,对于装维来说,他并不需要知道怎么更换,他只需要生成一张工单,由后台进行业务操作后,在去用户家把新光猫给装好即可,此时装维到底起到了什么作用呢?我想可能只是运输员吧,把一个设备从一个地方运到另一个地方罢了,此时并不能指望装维做什么,因为本质上来说装维的能力真的很差很差,我是不知道那些装维哪来的勇气做视频,还说自己什么什么能力很强?很强吗?吹牛的技术确实很强。 更换光猫之前,需要先明白为什么要更换光猫,怎么更换光猫,更换后不能用怎么办?怎么才能更换成功,换光猫以后被限速了怎么

qq_34146290的博客 1万+

MySQL之doublewrite

看文档redo log不是必须的 如果doublewrite写完了 原始数据写的时候失败了可以直接用doublewrite的数据 如果doublewrite都没写完 这时候原始数据肯定是对的 原始数据用redo log恢复就可以了 一、脏页刷盘风险 关于IO的最小单位: 1、数据库IO的最小单位是16K(MySQL默认,oracle是8K) 2、文件系统IO的最小单位是4K(也有1K的) 3、...

qq_38011241的博客 2044

三维重建之条纹投影结构光(一)

该系列为条纹投影结构光学习笔记,一共分为四篇。第一篇记录文献阅读的笔记,对重要知识点进行摘录介绍。 本篇以理论知识推导为主,主要从以下三个方面进行介绍,首先介绍条纹投影的三角测量原理;然后介绍相位主值的求解和相位展开;最后介绍相位和高度的模型,即相高模型。本篇博文不涉及具体的代码实现。 条纹投影结构光测量原理 ...

beyond951的博客 3万+

double write(二次写)

文章目录1.1 什么是double write1.2 double write原理1.3 double write恢复流程1.4 doublewrite的负载1.5 相关参数 1.1 什么是double write   MySQL的数据页默认是16K,而文件系统的数据页是4K,IO操作是按页为单位就行读写的。这就可能出现数据库对一个16k的数据页修改后,操作系统开始进行写磁盘,但是在这个过程中数据库宕机导致没有完全将16K数据页写到磁盘上。数据库重启后,校验数据页,发现有数据页不完整,就起不来了(redo是

雪辉博客 4980

同济大学C++mooc第五、六讲参考答案

同济大学C++moooc第5、6讲 第五讲 第一题 随机产生10个30~100(包括30,100)的正整数,求它们的最大值、最小值、平均值,并显示整个数组的值和结果。 代码片. // #include<iostream> const int n = 10; using namespace std; int main() { int s[n],i,j,t,sum=0; for (i = 0; i < n; i++)

cjzui6666的博客 1万+

BGP路由聚合:自动聚合和手动聚合

路由聚合是指将多条具体的路由合并为一条聚合路由,以减少路由表的条目数。这种技术通过只向对等体发送聚合后的路由,而不发送所有的具体路由,来减小路由表的规模。同时,被聚合的路由如果发生路由振荡,也不再对网络造成影响,从而提高了网络的稳定性。

网络技术联盟站 1221

MySQL Doublewrite Buffer(双写缓冲区)深入解析:原理及作用

Doublewrite Buffer是MySQL数据库中InnoDB存储引擎的一种机制,用于解决部分写失效的问题,提高数据完整性和可靠性。Doublewrite Buffer是内存+磁盘的结构,包括内存结构和磁盘结构两个部分。在内存结构中,Doublewrite Buffer由128个页(Page)构成,大小是2MB。这些页在内存中以Doublewrite Buffer的形式存在。

码到三十五 1万+

KEPServerEX 6 之 EX 6.11.718.0 发布说明

KEPServerEX 6.11.718.0 发布说明

-雲飛兄-博客 2882

writedouble_MySQL的Innodb doublewrite buffer来龙去脉

MySQL的Innodb doublewrite buffer来龙去脉乍一看文档上写的Innodb有个doublewrite buffer,从我们dba的角度一下认为可能是一块内存区域用来存放某种缓存的数据类型.但是恰恰这个doublewrite buffer是一种比较特殊的buffer,事实上这个buffer并不是一块内存区域,而是存放在表空间中或是单独指定的某个文件中的一个buffer.我们来...

weixin_39655049的博客 121

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

MySQL InnoDB 的 Doublewrite

本文主要介绍 MySQL InnoDB 存储引擎的 Doublewrite Buffer 技术,包含的内容有: 1. 部分写问题及其影响; 2. Doublewrite Buffer 的工作机制:; 3. Doublewrite Buffer优势与权衡; 4. 调优与实践建议等等 通过对以上内容的介绍,本文全面解读了 Doublewrite Buffer 的设计理念及其在事务型数据库中的应用价值。

tatasix的博客 1295

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

深入理解MySQL InnoDB Doublewrite Buffer:原理、配置与实践

在MySQL InnoDB存储引擎中,数据一致性是核心设计目标之一。而Doublewrite Buffer(双写缓冲区) 作为解决“部分写失效(Partial Write Failure)”问题的关键机制,直接决定了InnoDB在极端场景(如系统崩溃、断电)下的数据可靠性。本文将从概念、原理、配置实践到常见问题,全面拆解Doublewrite Buffer,帮助开发者和DBA更深入地理解其作用与应用。

专注Java和MySQL领域知识分享 1152

【MYSQL】Doublewrite Buffer双写缓存区

一般情况下,其余程序因为需要跟操作系统交互,所以它们的页(Page)大小都为操作系统页大小的整数倍。比如,Oracle的Page大小为8KB。MySQL程序是跑在Linux操作系统上的,理所当然要跟操作系统交互,所以MySQL中一页数据刷到磁盘,要写4个文件系统里的页。需要注意的是,这个刷页的操作并非原子操作,比如我操作系统写到第二个页的时候,Linux机器断电了,这时候就会出现问题了。造成「页数据损坏」。并且这种页数据损坏靠 redo日志是无法修复的。

xiazi0721的博客 1450

[小技巧54]从页写入到崩溃恢复:全面理解 InnoDB 的 Doublewrite Buffer

从页写入到崩溃恢复:全面理解 InnoDB 的 Doublewrite Buffer

分享工作中解决的问题,希望能帮到你 1027

MySQL系列-innodb doublewrite

DBW(double write) double wirte是innodb存储引擎为了保证数据页的安全性而引入的一项技术,那么数据库安全性从何说起呢? 就从数据磁盘的一次io是4KB说起,一项简单的命令来证实。 [root@hostname ~]# getconf PAGESIZE 4096 众所周知mysql数据页(page)大小为16KB,那么就会出现一个现象就是innodb一次IO,OS往往需要4次IO才能处理完,这就会引入一个问题,如果在第2次或者第3次IO的时候数据库crash或者服

renyanjie123的博客 2607

MySQL Doublewrite Buffer 有了解过吗?

引言:在数据库管理中,确保数据的完整性和一致性是至关重要的。然而,在持久化数据到磁盘的过程中,可能会遇到各种意外情况,如断电或系统崩溃,从而导致部分数据写入,而另一部分数据未能成功写入,这就产生了部分页面写问题。MySQL 中的 InnoDB 存储引擎为了解决这一问题,引入了 Doublewrite Buffer 机制。

2401_84419325的博客 1557

科普文:软件架构数据库系列之【详解InnoDB双写(Doublewrite Buffer)】

有人会想到系统恢复后MySQL可以根据redolog 进行恢复,而mysql在恢复的过程中是检查page的checksum,checksum就是pgae的最后事务号,发生partial page write 问题时,page已经损坏,找不到该page中的事务号,就无法恢复。在数据库启动时(异常关闭的情况下),都会做数据库恢复(redo)操作,恢复的过程中,数据库都会检查页面是不是合法(校验等等),如果发现一个页面校验结果不一致,则此时会用到两次写这个功能,这个特点也正是为了处理这样的错误而设计的。

为无为,事无事,味无味。 1436

一文带你了解MySQL之Doublewrite Buffer

详细介绍MySQL InnoDB Doublewrite Buffer的工作原理,通过流程图的方式来说明Doublewrite Buffer的工作流程,偏理论的知识,内容比较少也很好理解

Multis 2533

从MySQL innoDB的特性Doublewrite buffer谈起

聊下InnoDB的Doublewrite Buffer

zhanghailang1的博客 1243

mysql的Doublewrite Buffer是什么

兄弟们,我是一名大三学生(即将大四),java后端,目前在一家小公司实习,可是目前情况并不乐观,公司里三个前端,后端就我一个实习生,然后一个负责人(全栈),一个。百度24届内推开始了!想问一下uu们小菜应该什么时候投秋招,现在看到别人投秋招,找工作,心里挺着急,但是也不知道现在到底哪个是正式批哪个是提前批,不知道怎么投了,有没有大佬指点一下?#23届找工作求助阵地# 5月份成立的公司,200w注册资本,5个人,写代码的就一个,说招两个人,做机械臂控制切割的qt,图形学,运动控制相关8k,武汉,双休说。

2301_78234743的博客 168

MySQL doublewrite buffer:如何保证数据页完整性

本文深入探讨 MySQL InnoDB 存储引擎中的 doublewrite buffer 机制,详细解析其如何通过双写策略保证数据页在异常情况下的完整性。文章将涵盖 doublewrite buffer 的工作原理、写入流程、异常处理机制以及相关配置参数,帮助读者理解这一关键特性如何防止部分写入问题。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1183

mysql事务与redo log undo log doublewrite buffer

redo log redo log是基于磁盘数据结构记录的日志,用于在db崩溃时恢复由未完成的事务写入的正确数据。在正常操作期间,redo log会对SQL语句或低级API调用产生的更改表数据的请求进行编码。在意外关闭之前没有完成数据文件更新的修改将在初始化期间和连接被接受之前自动重放。关于redo log在崩溃恢复中的作用,请参见“InnoDB恢复”章节14.19.2 Section 14.19.2, “InnoDB Recovery” 默认redo log在磁盘上由两个文件表示 ib_logfile0

阿呆的专栏 869

在 MySQL 的 InnoDB 存储引擎中的 Doublewrite Buffer

比如,正在向磁盘写入一个 16KB 的页,此时突然发生断电、磁盘故障等意外,导致只写入了部分数据(比如 8KB ),那么这个页就会变成 “半写页” ,页的结构被破坏。一旦出现部分写失败,后续数据库启动或访问该页时,会发现页的校验不通过,无法正常识别和使用,进而可能导致数据丢失、损坏,影响数据库的一致性和可用性。综上所述,Doublewrite Buffer 是 InnoDB 为应对磁盘写入可能出现的部分写失败问题而设计的关键组件,通过双写的机制,有效防止数据页损坏,保障数据库的数据完整性和可靠性。

weixin_43521001的博客 414
上一篇: ib_logfile与log-bin区别
下一篇: 页断裂(partial write)与doublewrite技术
linuxheik
博客等级 码龄15年 865粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值