InnoDB之Dirty Page、Redo log
这篇讲的是InnoDB引擎里一个很经典的数据持久化问题。当我们要往数据库里写数据时,系统并不会每次都直接改磁盘,而是先在内存(Buffer Pool)里把对应的“页”修改了。这个被修改过的、和磁盘上还不一致的内存页,就是“脏页”(Dirty Page)。这么做性能很高,但电脑一断电,内存里的修改就全丢了。 那InnoDB是怎么保证数据不丢的呢?这就轮到它的“重做日志”(Redo Log)登场了。在修改内存里的数据页之前,InnoDB会先把这个修改动作本身,按顺序记到Redo Log文件里。Redo Log是顺序写入磁盘的,速度很快。 所以整个流程是:事务提交时,只要确保对应的Redo Log已经写入磁盘,就算内存里的脏页还没来得及刷盘,系统重启后也能根据Redo Log的记录,把那些“脏”修改重新应用一遍,把数据恢复过来。这种“Write-Ahead Logging”(先写日志)的设计,巧妙地结合了内存操作的高性能和日志写入的可靠性,让InnoDB既跑得快,又丢不了数据。