MySQL中WAL机制的一些个人理解,个人觉得比较通俗易懂

WAL机制:Write ahead logging,称为预写式机制

它的关键点就是先写日志,再磁盘

这里的logging指的是redo log

我们观察一个更新操作,通过如果有WAL机制,MySQL是怎么处理的,能达到什么样的效果;如果没有WAL机制,那么MySQL又会怎么处理来理解

先看如果没有WAL机制,也就是说没有redo log,那么这时我们每做一次更新操作,就必须要将更新的数据写入磁盘,注意这个过程是随机写磁盘(它是比较耗时间的)

存在WAL机制时,MySQL的操作:先将更新的记录写入redo log中,再去更新内存,我们分步来分析一下,为什么这样的操作是妙的

 1)将更新的操作写入redo log中,这里写入redo log是分为三步骤,一是写入内存中为redo log分配的区域,接着写入文件系统(操作系统里的一个抽象概念,有兴趣的可以去操作系统学习一下),最后进行写入磁盘,完成真正的持久化

2)更新内存这一操作就涉及到了MySQL中的另一个内容change buffer,在这就不展开说明

我们对比一下有和没有时操作有什么不同,我们可以看到其实有WAL机制和没有WAL机制都会有写磁盘的,但是二者的写磁盘是不同的,没有WAL机制是随机写(如果有兴趣可以在计组里学习一下磁盘写盘的相关内容,没有兴趣,只需要记住,随机写相比较于顺序写是相当费时间的),而有WAL机制的redo log的的持久化写磁盘是顺序写,可以理解为在磁盘中为redo log单独分配了一个区域,涉及的更新记录按照发生的次序依次记录在这个区域,这个时候就不涉及寻道、等待时间,可以说和写内存速度一样,是非常快的

写到这,我本来的疑惑其实是已经解开了,写的很粗略,没有涉及change buffer的内容,也没有写道redo log的具体执行的步骤

总结一下,其实不论有没有WAL机制,我们最终都肯定是需要将更新操作的数据写入磁盘中的,而且MySQL中也有很多的算法和策略来选择恰当的时机写磁盘,但是这一切的算法策略的前提或者说保障是什么?就是WAL机制,它记录了全部的更新操作,它保证了即使MySQL或者电脑发生异常,这些更新操作不会丢失,如果没有WAL机制,你那些算法策略统统没有用,就得老老实实的有更新操作,就执行写盘

那是不是用大白话讲,WAL机制就是一个用来记录全部更新操作的机制

emmmm,第一次写这种解释型的博客,可能自己的理解存在一些问题,语言组织和表达也不太好,如果哪里有问题或者疑惑,请大家批评指教(前提是得有人看,估计是不会有多少的)

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值