什么是 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 运行恶意代码具有很多优点, ...
随机推荐
- 本地部署DeepSeek
没想到新年最热闹的地方之一会是互联网,刷爆朋友圈的除了新年祝福还有DeepSeek.揣着一颗好奇心试了试,竟有一种发现新大路的感觉.估计是围观的人太多,在线的版本有时候会出现连不上的情况,好奇心驱使之 ...
- 央国企“严选”!天翼云夺得IaaS+PaaS市场桂冠!
10月17日,赛迪顾问发布的<2024中国央国企云市场研究报告>显示,2023年,在中国央国企云"IaaS+PaaS"市场中,中国电信天翼云凭借行业云和全栈服务能力.渠 ...
- 本地部署 Browser-Use WebUI + 本地部署 DeepSeek 实现浏览器AI自动化
前一版采用的是 Deepseek 官方API,由于最近比较火,可能遇到服务器繁忙导致运行不成功,这一版选择通过 Ollama 本地部署的模型 一.安装部署(已安装 python3.11 或以上版本.p ...
- FreeSql学习笔记——1.入门
前言 学习过程中,使用的是.Net 5 WebApi项目,数据库使用的是SQL Server,主要会整理下常用的api,现在就开始吧~ 初始化 先选择一个WebCoreApi项目进行创建,创建完项 ...
- P4774 [NOI2018] 屠龙勇士 题解
传送门 题解 思路 由题目可知,一条龙被攻击 \(x\) 次并回复若干次后生命值恰好为 \(0\) 则死亡,可以得出如下式子: \[\large ATK_i \cdot x \equiv a_i(\m ...
- [PA2021] Od deski do deski 题解
好题好题,难者不会会者不难,我是前者. 实际上加入就可以合法的数是很好计算的.考虑现在所有前缀合法串后的字符实际上都可以满足条件. 容易想到根据是否合法设置状态.设 \(f_{i,j}/g_{i,j} ...
- 如何在 PIP 配置文件中设置默认源?
在不同的操作系统中,在 PIP 配置文件中设置默认源的方法如下: Windows 操作系统 打开文件资源管理器,在地址栏输入 %APPDATA% 并回车,进入用户配置目录. 在该目录下创建一个名为 p ...
- Linux系统下nginx的安装与卸载
1.1 安装 准备依赖环境 1.安装 gcc 依赖库 yum install gcc-c++ 2.安装 PCRE pcre-devel 依赖库 yum install -y pcre pcre-dev ...
- 详解nginx配置url重定向-反向代理
https://www.jb51.net/article/99996.htm 本文系统:Centos6.5_x64 三台主机:nginx主机,hostname: master.lansgg.com ...
- 依赖注入(DI)与控制反转(IoC)
.wj_nav { display: inline-block; width: 100%; margin-bottom: 0.375rem } .wj_nav span { display: inli ...