WAL Write AheadLog

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

WAL即 Write Ahead LogWAL的主要意思是说在将元数据的变更操作写入磁盘之前先预先写入到一个log文件中

磁盘读取分为顺序读取和随机读取
内存读取也有顺序读取和随机读取
下图是磁盘内存 顺序和随机读取的效率表
在这里插入图片描述

一般来说内存读取速度要比磁盘读取速度快一个数量级

上图可以看出如果是顺序读取磁盘其速度堪比内存随机读取

WAL原理
通过cache合并多条写操作为一条减少IO次数
日志顺序追加性能远高于数据随机写.
随机内存处理性能远高于数据随机处理.

性能:顺序的日志磁盘处理+随机的数据内存处理>随机的数据磁盘处理

使用 WAL 的数据库系统不会再每执行一条 WAL 操作就将数据刷入数据库文件中一般积累一定的量然后批量写入通常使用页为单位这是磁盘的写入单位。 同步页缓存和数据库文件的行为被称为 checkpoint检查点一般在 page cache积累到一定页数修改的时候当然有些系统也可以手动执行 checkpoint。执行 checkpoint 之后page cache可以被清空这样可以保证page cache不会因为太大而性能下降。Checkpoint目的是减少数据库的恢复时间(服务奔溃或重启服务后的恢复)

当系统内存不足时,Lazy writer会自动触发,Lazy writer的目的是保证SQL OS 有空闲缓存块和系统有一定可用内存。

基本上所有的数据库都会有 WAL 类似的设计例如 MySQL 的 Innodb redo log 等等

在这里插入图片描述

在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6