1. redo log的概念是什么? 为什么会存在.
redo log是固定大小的文件,这也决定了它是需要循环使用文件空间的,write pos
是当前记录的位置,一边写一边后移,写到第 3 号文件末尾后就回到 0 号文件开头。
checkpoint
是当前要擦除的位置,也是往后推移并且循环的,擦除记录前要把记录更新到数据文件。
redo log
是物理日志,记录的是对数据库页的修改,它用来恢复提交后的物理数据页(恢复数据页,且只能恢复到最后一次提交的位置)。
由于更新数据的时候引擎并不是按条更新的,而是以页为最小单位更新。如果没有redolog
,每次更新一条数据都要把整页的数据刷新到磁盘。如果更新多条数据,很可能一次就要更新多页,而且这些io是随机io,磁盘i/o就会多且慢。有了redolog
,就不需要每次直接按页更新磁盘,而是把更新写到redolog
中,然后等空闲时间再把redolog
中的更新写入到磁盘。这样做的好处是redolog
是顺序写的,而且是按条不是按页写。所以虽然多了一步,实际上是比直接更新快的。
2. 什么是WAL(write-ahead log)机制, 好处是什么.
WAL就是在将数据进行刷盘时,需要先将数据记录在日志中,也称为预写日志,是数据库系统中常见的一种手段,用于保证数据操作的原子性和持久性。
这个问题相信很多同学都能猜出来,MySQL更改数据的时候,之所以不直接写磁盘文件中的数据,最主要就是性能问题。因为直接写磁盘文件是随机写,开销大性能低,没办法满足MySQL的性能要求。所以才会设计成先在内存中对数据进行更改,再异步落盘。但是内存总是不可靠,万一断电重启,还没来得及落盘的内存数据就会丢失,所以还需要加上写日志这个步骤,万一断电重启,还能通过日志中的记录进行恢复。
写日志虽然也是写磁盘,但是它是顺序写&#x