首页 > 数据库 >什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL?

什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL?

时间:2024-12-15 17:43:55浏览次数:5  
标签:事务 WAL Logging Log Ahead 数据库 MySQL 日志

什么是 Write-Ahead Logging (WAL) 技术?

Write-Ahead Logging (WAL) 是一种用于数据库系统的日志记录技术,它要求在对数据库进行任何修改之前,所有的修改都必须先写入到日志文件中。这样做的目的是为了保证事务的持久性和一致性,确保即使数据库发生崩溃或意外关闭,未完成的事务数据也不会丢失。

WAL 的核心思想是:每次对数据库的修改(如插入、更新或删除)都被记录到日志中,这些日志文件按顺序写入。只有当日志被成功写入并且事务提交后,修改才会被持久化到数据库文件中。

WAL 的优点

  1. 持久性(Durability)

    • 即使数据库系统崩溃,只要事务已经被写入日志,崩溃后的数据库可以通过重放日志文件恢复到崩溃前的状态,保证已提交事务的数据不会丢失。
  2. 一致性(Consistency)

    • WAL 确保数据库总是处于一致的状态。如果系统崩溃,可以通过 WAL 恢复到最后一次一致的状态。
  3. 崩溃恢复

    • WAL 允许数据库通过重放日志来恢复数据。无论是部分提交的事务,还是未完成的事务,WAL 都能确保事务完整性,并且在崩溃恢复时避免数据丢失。
  4. 提高性能

    • 因为数据修改首先写入日志,而不是立即写入数据库磁盘,所以 WAL 允许更高效的磁盘 I/O。日志文件通常是顺序写入的,避免了磁盘的随机写入,从而提高性能。
  5. 并发支持

    • WAL 可以有效支持并发事务,通过保证日志的顺序性,避免了不同事务之间的冲突。

MySQL 中是否用到 WAL?

MySQL 本身没有直接实现 WAL,但其 InnoDB 存储引擎 采用了一种类似于 WAL 的机制,主要通过 重做日志(Redo Log) 来实现事务的持久性和一致性。

  • Redo Log

    • InnoDB 使用 重做日志 来记录所有事务的修改。在事务开始时,操作会先记录到重做日志中,之后再更新数据页。如果数据库崩溃,可以通过重做日志来恢复未完成的事务。
  • Undo Log

    • Undo Log 用于事务回滚,确保在事务失败时,已经进行的操作能够被撤销。虽然 Undo Log 不属于 WAL 的一部分,但它与 WAL 有相似的作用,帮助保证数据库在崩溃后的恢复能力。

举个例子来说明

假设我们有一个数据库包含两个表:usersorders,我们执行一个事务,更新用户余额,并插入一条新的订单记录。

START TRANSACTION;

UPDATE users SET balance = balance - 100 WHERE user_id = 1;
INSERT INTO orders (user_id, amount) VALUES (1, 100);

COMMIT;
  1. 执行过程:
  • 在执行 UPDATE 语句时,MySQL 会首先将这次更新操作记录到 Redo Log。
  • 然后,它会更新 users 表的数据。
  • 同样,在执行 INSERT 操作时,MySQL 会将该操作记录到 Redo Log。
  • 最后,事务会被提交。
  1. 崩溃恢复:
  • 如果在 COMMIT 之前发生了崩溃,MySQL 会通过读取 Redo Log 文件来检查是否有已经提交但未写入数据文件的事务。
  • Redo Log 会确保在崩溃后,事务的结果(如更新用户余额和插入订单)能够被正确地恢复。
  1. 恢复过程:
  • 在数据库恢复后,MySQL 会重新执行 Redo Log 中的操作,确保已经提交的事务被应用到数据文件中。未提交的事务则会被回滚。
    通过这种方式,MySQL 的 InnoDB 存储引擎使用类似 WAL 的机制保证了事务的持久性和一致性,即使在系统崩溃时也能恢复数据。

总结:

Write-Ahead Logging (WAL) 是一种日志记录机制,确保事务在被提交之前先写入日志,以保障数据的一致性、持久性和崩溃恢复能力。MySQL 的 InnoDB 存储引擎通过 Redo Log 和 Undo Log 实现了类似 WAL 的功能,确保了事务的持久性和一致性。通过 WAL 和日志恢复机制,数据库在崩溃时能恢复到一致状态,避免数据丢失。

标签:事务,WAL,Logging,Log,Ahead,数据库,MySQL,日志
From: https://www.cnblogs.com/eiffelzero/p/18608229

相关文章

  • DVR4 pg walkthrough Intermediate window
    nmap┌──(root㉿kali)-[~/lab]└─#nmap-p--A-sS192.168.219.179StartingNmap7.94SVN(https://nmap.org)at2024-12-1504:22UTCStats:0:00:22elapsed;0hostscompleted(1up),1undergoingSYNStealthScanSYNStealthScanTiming:About34.76%don......
  • 什么是 Java 中的 logging write barrier?
    什么是Java中的LoggingWriteBarrier?LoggingWriteBarrier是Java垃圾回收器在维护堆引用关系时常用的一种机制。它是一种特殊的写屏障(WriteBarrier),用于记录堆中某些引用的变化情况。该机制的主要目的是协助垃圾回收器在并发或增量标记阶段,正确跟踪对象引用的变化。1.......
  • red_hat的firewalld:富规则编辑
    添加允许WAF访问443端口firewall-cmd--permanent--add-rich-rule='rulefamily="ipv4"sourceaddress="《WAF地址》"portprotocol="tcp"port="443"accept'添加拒绝所有ip访问443端口firewall-cmd--permanent--add-rich-rule='ru......
  • Win11系统提示找不到WalletProxy.dll文件的解决办法
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个WalletProxy.dll文件(挑选合适的版本文件)把......
  • Algernon pg walkthrough Window
    第一次打window从简单的开始打起吧nmap└─#nmap-p--A192.168.150.65StartingNmap7.94SVN(https://nmap.org)at2024-12-1000:19UTCStats:0:04:38elapsed;0hostscompleted(1up),1undergoingScriptScanNSETiming:About97.50%done;ETC:00:24(0......
  • ifcwall案例
    ifc中一个ifcwall案例 #6=IFCCARTESIANPOINT((0.,0.,0.));#10=IFCCARTESIANPOINT((0.,0.));#20=IFCDIRECTION((0.,0.,1.));#26=IFCDIRECTION((-1.,0.));#32=IFCAXIS2PLACEMENT3D(#6,$,$);#33=IFCLOCALPLACEMENT(#3665,#32);#96=IFCAXIS2PLACEMENT3D(#6,$,$);#......
  • cmu15545笔记-WAL和数据库恢复
    目录总览缓存策略(BufferPoolPolicies)ShadowPaging(No-Steal+Force)SQLiteRollbackMode(Steal+Force)总结WAL(Write-HeadLog)基本思想日志格式(LogSchemes)检查点(CheckPoint)ARIES算法日志序列号事务提交流程模糊检查点(FuzzyCheckPointing)ARIES恢复算法总览该笔记包含了原课......
  • Markers pg walkthrough Intermediate
    发现是个md变成pdf的功能站上网查exp发现先了一个有用的https://security.snyk.io/vuln/SNYK-JS-MARKDOWNPDF-5411358能够任意文件读取并且当上传的不是md文件时他会报错显示出程序的执行路径尝试读取sau的id_rsa但是发现登录不上这是由于该用户在/etc/passwd被标......
  • 使用 ASP.NET Core HttpLoggingMiddleware 记录 http 请求/响应
            我们发布了一个应用程序,该应用程序运行在一个相当隐蔽的WAF后面。他们向我们保证,他们的产品不会以任何方式干扰我们的应用程序。这是错误的。他们删除了我们几乎所有的“自定义”标头。为了“证明”这一点,我构建了一个中间件,用于存储我们收到和发送的所有唯......
  • Flu PG walkthrough Intermediate
    nmap┌──(root㉿kali)-[/home/ftpuserr]└─#nmap-p--A192.168.192.41StartingNmap7.94SVN(https://nmap.org)at2024-12-0603:24UTCNmapscanreportfor192.168.192.41Hostisup(0.071slatency).Notshown:65532closedtcpports(reset)PORTS......