fsync()不是你想的那样:数据库持久化的致命误解

2018年3月,PostgreSQL开发者Craig Ringer在邮件列表中披露了一个令人震惊的发现:PostgreSQL对fsync()错误处理不当可能导致数据损坏。这个后来被称为"fsyncgate"的事件揭示了一个更深层的问题——许多开发者对fsync()的语义存在根本性误解。 ...

9 min · 4024 words

事务隔离级别为何成为数据库最被误解的概念

医院值班系统中,两位医生同时尝试放弃自己的值班班次。每个医生在操作前都会检查:是否至少还有另一位医生在值班?检查结果都显示"是",于是两人都放心地提交了更新。最终结果:当晚没有任何医生值班。 ...

10 min · 4538 words

B+树与LSM-tree:为什么数据库存储引擎没有万能方案

1970年7月,波音研究实验室的 Rudolf Bayer 和 Edward McCreight 首次流传了一篇题为"Organization and Maintenance of Large Ordered Indices"的论文,两年后正式发表在 Acta Informatica 期刊。他们发明的 B-tree 在此后五十年里统治了数据库存储引擎的设计。 ...

9 min · 4508 words

写倾斜异常:为什么可重复读隔离级别还是会出现一致性问题

1995年,IBM 的研究人员发表了一篇名为"A Critique of ANSI SQL Isolation Levels"的论文。这篇论文指出了 ANSI SQL 标准对事务隔离级别定义的模糊性,并引入了一个在当时鲜为人知的异常现象:写倾斜(Write Skew)。近三十年后,这个概念仍然是数据库领域最容易被误解的问题之一。 ...

8 min · 3787 words

连接池耗尽:为什么你的数据库连接池总是成为生产事故的元凶

2025年11月,某电商平台在“双十一”与“黑色星期五”促销期间遭遇了一场灾难:API响应时间从200ms飙升到45秒,每小时的营收损失达到89万美元。事后复盘发现,罪魁祸首是一个配置错误的数据库连接池——最大连接数被设置为10,而数据库服务器完全可以处理500个并发连接。 ...

13 min · 6450 words

你的索引为什么救不了慢查询?从B+树结构到优化器决策的完整解析

你花了两小时设计了一套"完美"的索引方案:where条件列建了索引,排序字段建了索引,连join的列都建了索引。上线第一天,监控系统就开始报警——那条"应该很快"的查询,执行时间飙到了30秒。 ...

10 min · 4798 words