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

Sherwin.Wei Lv7

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

回答重点

WAL(Write-Ahead Logging)技术是一种数据库事务日志管理技术,它确保在修改真正的数据之前,先将修改记录写入日志。这使得即使系统崩溃,通过日志也能恢复数据。保证了数据的持久性和一致性。

WAL 它的核心思想就是先写日志,再写数据,大致执行流程如下:

1)当一个事务开始时,所有对数据库的修改都会先记录到一个日志文件中,而不是直接应用到数据库文件,这些日志记录了数据的变更信息,可以用于恢复数据。

2)当日志记录被安全地写入磁盘后,才会将这些修改应用到数据库文件中。

扩展知识

WAL 优点

  • 保证数据一致性:在事务提交之前,变更首先记录到日志中,在系统崩溃后,数据库可以通过重做日志中的操作来恢复到崩溃前的状态,确保数据一致性和持久性。
  • 性能提升:把数据的随机写转化成日志的顺序写,提高了整体性能。

Redo Log

在 MySQL InnoDB 存储引擎中,重做日志(Redo Log)就是 WAL 的实现,用于保证事务的持久性和崩溃恢复能力。

InnoDB 重做日志的工作机制如下:

1)当一个事务开始时,所有对数据库的修改首先记录到重做日志缓冲区中。

2)重做日志缓冲区的数据会周期性地刷新到磁盘上的重做日志文件(ib_logfile0 和 ib_logfile1)。

3)当事务提交时,InnoDB 确保重做日志已写入磁盘,然后将数据页的修改写入数据文件。

4)如果系统崩溃,InnoDB 会在启动时通过重做日志重新应用所有未完成的事务,以恢复数据库到一致状态。

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