知识卡片

Write-Ahead日志的本质

普通读书笔记卡

内容

一个事务修改的多条记录分散在磁盘不同位置,若每次提交直接写磁盘要触发多次随机I/O。Write-Ahead思路:先在内存完成修改,把变更顺序追加写入日志(顺序I/O代价低),再由后台线程异步刷盘。”Ahead”指日志写入相对真实数据落盘在前面。宕机后可靠重放日志找回数据。发散:Redo Log、LSM树WAL、复制状态机日志本质都是先追加写日志再异步整理状态,核心是用顺序写替换随机写。

参考来源

- 位置:第6章《数据库》6.5.1节「Write-Ahead」(源文件:_epub-src/text/part0029.html) - 结论依据:原文明确说明如果每个事务直接写磁盘会导致多次随机I/O,Write-Ahead的思路是先在内存中提交事务再写日志(顺序追加),后台任务异步把内存数据刷到磁盘,Ahead指日志写入相对真实数据落盘而言在前面,直接支持卡片论述。 - 原始内容:"如果每个事务都直接写磁盘,一次事务提交就要多次磁盘的随机I/O,性能达不到要求……先在内存中提交事务,然后写日志……然后后台任务把内存中的数据异步刷到磁盘。日志是顺序地在尾部Append……这里的Ahead,其实是指相对于真正的数据刷到磁盘。"