什么是 Write-Ahead Logging (WAL) 技术?它的优点是什么?MySQL 中是否用到了 WAL?
什么是 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