从崩溃到恢复:数据库检查点机制如何让 WAL 不再是无底洞

1970年代,当第一个关系数据库系统还在襁褓中时,工程师们就面临一个根本性的矛盾:内存速度快但易失,磁盘可靠但缓慢。一个事务提交后,如何保证数据在断电瞬间不会丢失?如何让数据库在崩溃后能快速恢复到一致状态?这些问题的答案,催生了数据库领域最基础也最精妙的设计——预写日志(Write-Ahead Log,WAL)与检查点(Checkpoint)机制。 ...

11 min · 5025 words

SQLite为何能征服世界:从三位开发者的固执到一万亿数据库实例的技术传奇

2000年5月29日,D. Richard Hipp开始编写一个嵌入式数据库引擎。他的动机很务实:作为通用动力公司的承包商,他正在为美国海军的奥斯卡·奥斯汀号驱逐舰开发软件。军舰上的程序需要一个本地数据库,但传统的客户端-服务器数据库在这个场景下有一个致命缺陷——如果数据库服务器进程崩溃,整个应用程序就会瘫痪。 ...

11 min · 5481 words

数据库已提交的事务为何会丢失?从fsync到异步提交的持久性权衡

数据库教科书告诉开发者一个简单的承诺:事务一旦提交,数据就是持久的。ACID中的"D"代表Durability——持久性。但生产环境中的实际情况远比教科书复杂:同样配置了主从复制、同样使用了SSD存储、同样收到了COMMIT成功的返回码,断电重启后,有些数据确实完好无损,有些却凭空消失了。 ...

13 min · 6186 words

Write-Ahead Log:数据库如何在断电瞬间守住数据最后一道防线

1992年3月,ACM Transactions on Database Systems发表了一篇题为《ARIES: A Transaction Recovery Method Supporting Fine-Granularity Locking and Partial Rollbacks Using Write-Ahead Logging》的论文。这篇由IBM Almaden研究中心的C. Mohan等人撰写的文章,定义了此后三十余年数据库崩溃恢复的基本范式。 ...

13 min · 6282 words