什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL?
什么是 Write-Ahead Logging (WAL) 技术?
Write-Ahead Logging (WAL) 是一种用于数据库系统的日志记录技术,它要求在对数据库进行任何修改之前,所有的修改都必须先写入到日志文件中。这样做的目的是为了保证事务的持久性和一致性,确保即使数据库发生崩溃或意外关闭,未完成的事务数据也不会丢失。
WAL 的核心思想是:每次对数据库的修改(如插入、更新或删除)都被记录到日志中,这些日志文件按顺序写入。只有当日志被成功写入并且事务提交后,修改才会被持久化到数据库文件中。
WAL 的优点
持久性(Durability):
- 即使数据库系统崩溃,只要事务已经被写入日志,崩溃后的数据库可以通过重放日志文件恢复到崩溃前的状态,保证已提交事务的数据不会丢失。
一致性(Consistency):
- WAL 确保数据库总是处于一致的状态。如果系统崩溃,可以通过 WAL 恢复到最后一次一致的状态。
崩溃恢复:
- WAL 允许数据库通过重放日志来恢复数据。无论是部分提交的事务,还是未完成的事务,WAL 都能确保事务完整性,并且在崩溃恢复时避免数据丢失。
提高性能:
- 因为数据修改首先写入日志,而不是立即写入数据库磁盘,所以 WAL 允许更高效的磁盘 I/O。日志文件通常是顺序写入的,避免了磁盘的随机写入,从而提高性能。
并发支持:
- WAL 可以有效支持并发事务,通过保证日志的顺序性,避免了不同事务之间的冲突。
MySQL 中是否用到 WAL?
MySQL 本身没有直接实现 WAL,但其 InnoDB 存储引擎 采用了一种类似于 WAL 的机制,主要通过 重做日志(Redo Log) 来实现事务的持久性和一致性。
Redo Log:
- InnoDB 使用 重做日志 来记录所有事务的修改。在事务开始时,操作会先记录到重做日志中,之后再更新数据页。如果数据库崩溃,可以通过重做日志来恢复未完成的事务。
Undo Log:
- Undo Log 用于事务回滚,确保在事务失败时,已经进行的操作能够被撤销。虽然 Undo Log 不属于 WAL 的一部分,但它与 WAL 有相似的作用,帮助保证数据库在崩溃后的恢复能力。
举个例子来说明
假设我们有一个数据库包含两个表:users 和 orders,我们执行一个事务,更新用户余额,并插入一条新的订单记录。
START TRANSACTION;
UPDATE users SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, amount) VALUES (1, 100);
COMMIT;
- 执行过程:
- 在执行 UPDATE 语句时,MySQL 会首先将这次更新操作记录到 Redo Log。
- 然后,它会更新 users 表的数据。
- 同样,在执行 INSERT 操作时,MySQL 会将该操作记录到 Redo Log。
- 最后,事务会被提交。
- 崩溃恢复:
- 如果在 COMMIT 之前发生了崩溃,MySQL 会通过读取 Redo Log 文件来检查是否有已经提交但未写入数据文件的事务。
- Redo Log 会确保在崩溃后,事务的结果(如更新用户余额和插入订单)能够被正确地恢复。
- 恢复过程:
- 在数据库恢复后,MySQL 会重新执行 Redo Log 中的操作,确保已经提交的事务被应用到数据文件中。未提交的事务则会被回滚。
通过这种方式,MySQL 的 InnoDB 存储引擎使用类似 WAL 的机制保证了事务的持久性和一致性,即使在系统崩溃时也能恢复数据。
总结:
Write-Ahead Logging (WAL) 是一种日志记录机制,确保事务在被提交之前先写入日志,以保障数据的一致性、持久性和崩溃恢复能力。MySQL 的 InnoDB 存储引擎通过 Redo Log 和 Undo Log 实现了类似 WAL 的功能,确保了事务的持久性和一致性。通过 WAL 和日志恢复机制,数据库在崩溃时能恢复到一致状态,避免数据丢失。
什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL?的更多相关文章
- 浅析SQLite的锁机制和WAL技术
锁机制 SQLite基于锁来实现并发控制.SQLite的锁是粗粒度的,并不拥有PostgreSQL那样细粒度的行锁,这也使得SQLite较为轻量级.当一个连接要写数据库时,所有其它的连接都被锁住,直到 ...
- The storage wars: Shadow Paging, Log Structured Merge and Write Ahead Logging
The storage wars: Shadow Paging, Log Structured Merge and Write Ahead Logging previous: Seek, and yo ...
- 携程二面:讲讲 MySQL 中的 WAL 策略和 CheckPoint 技术
前段时间我在准备暑期实习嘛,这是当时面携程的时候二面的一道问题,我一脸懵逼,赶紧道歉,不好意思不知道没了解过,面试官又解释说 redo log,我寻思着 redo log 我知道啊,WAL 是啥?给面 ...
- 【Mysql】事务日志-Write Ahead logging vs command-logging(转)
原理讲解: Write Ahead logging vs command logging Write Ahead logging 持久化数据保存在磁盘,数据的存储是随机的,并非顺序: 内存中保存磁盘数 ...
- MySQL中Checkpoint技术
个人读书笔记,详情参考<MySQL技术内幕 Innodb存储引擎> 1,checkpoint产生的背景数据库在发生增删查改操作的时候,都是先在buffer pool中完成的,为了提高事物操 ...
- MySQL 中的WAL机制
本文主要概括的是 WAL 机制涉及的三种日志,具体与其他组件的联系.执行可查看 一条 sql 的执行过程详解 .MySQL中的事务原理和锁机制 . 是什么 WAL,全称是Write-Ahead Log ...
- 分享MYSQL中的各种高可用技术(源自姜承尧大牛)
分享MYSQL中的各种高可用技术(源自姜承尧大牛) 图片和资料来源于MYSQL大牛姜承尧老师(MYSQL技术内幕作者) 姜承尧: 网易杭州研究院 技术经理 主导INNOSQL的开发 mysql高可用各 ...
- WCF技术剖析之十三:序列化过程中的已知类型(Known Type)
原文:WCF技术剖析之十三:序列化过程中的已知类型(Known Type) [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经>为此录制的节目视频(苏州话) ...
- 分享MYSQL中的各种高可用技术
分享MYSQL中的各种高可用技术 图片和资料来源于姜承尧老师(MYSQL技术内幕作者) mysql高可用各个技术的比较 数据库的可靠指的是数据可靠 数据库可用指的是数据库服务可用 可靠的是数据:例如工 ...
- 技术分享:如何在PowerShell脚本中嵌入EXE文件
技术分享:如何在PowerShell脚本中嵌入EXE文件 我在尝试解决一个问题,即在客户端攻击中只使用纯 PowerShell 脚本作为攻击负荷.使用 PowerShell 运行恶意代码具有很多优点, ...
随机推荐
- mysl 修改数据存储位置后服务启动后停止
在 Windows 系统中安装完 mysql 后,如果是生产用的机器,通常会修改数据存储位置.基本步骤: 1. 停止 mysql 服务: 2. 修改 my.ini 文件中的 datadir=" ...
- Rocksdb原理简介
本文分享自天翼云开发者社区<Rocksdb原理简介>,作者:l****n Rocksdb作为当下nosql中性能的代表被各个存储组件(mysql.tikv.pmdk.bluestore)作 ...
- Q:oracle通过正则表达式替换对应值
示例 把http://192.168.1.1:8888/a.html中的192.168.1.1:8888/替换成172.32.32.1:9999/ SELECT replace('http://192 ...
- Linux编译安装Canal
一.简介 下载源码:git clone https://github.com/alibaba/canal.git canal.adapter: 作用1:对接上游消息,包括kafka.rocketmq. ...
- Flink客户端操作
一.mysql数据准备 mysql -hip -uroot -p密码 CREATE DATABASE flink; USE flink; CREATE TABLE user ( id INTEGER ...
- Flink监控看板Dashboard解析
一. 二.常见问题排查 1.数据反压 背压(Backpressure)机制排查 点击JobName 点击某个算子 点击Backpressure查看,状态为HIGH时,则存在数据反压问题 注:若流程为A ...
- clickhouse 为什么如此快及优化
一.clickhouse 为什么如此快 1)优秀的代码,对性能的极致追求 clickhouse 是 CPP 编写的,代码中大量使用了 CPP 最新的特性来对查询进行加速. 2)优秀的执行引擎以及存储引 ...
- QT5笔记: 19. QFileSystemModel 联动 QListView QTableView QTreeView
Model 指的是数据 View 指的是界面,View不用设置,只需要和Model进行绑定,绑定完成之后就是Model的格式了 例子:*本例子中QListView QTableView QTreeVi ...
- JS ellipse 转 PathData
绘制Path function ellipse2path(cx, cy, rx, ry, degree) { //cx cy:圆心 //rx ry:x y 轴长 //degree:度数,顺时针方向为正 ...
- SpringBoot项目war、jar自定义配置application文件的位置
此篇文章的真正目的应该是关于war包运行在独立tomcat下时,应如何在war包外部配置application.properties,以达到每次更新war包而不用更新配置文件的目的.百度搜素Sprin ...