数据库连接池不是越大越好:为什么10个连接能击败100个

2013年,Oracle Real World Performance Group发布了一段令人震惊的视频。他们在压力测试中,将9600个并发线程的数据库连接池从2048降到96——不做任何其他优化,响应时间从100毫秒骤降到2毫秒。 ...

13 min · 6445 words

索引越多查询越慢?从写入放大到优化器误判的完整技术解析

一个开发者盯着慢查询日志,发现一条耗时3秒的SELECT语句。他熟练地添加了一个索引,查询时间降到50毫秒。第二天,他又用同样的方法解决了另一个慢查询。一个月后,这张表已经积累了12个索引。 ...

11 min · 5161 words

查询优化器的致命误判:为什么数据库有时会选错执行计划

2015年,慕尼黑工业大学的研究团队做了一个实验:他们把PostgreSQL查询优化器的基数估计值全部替换成真实值,然后观察113个复杂查询的执行时间变化。 ...

8 min · 3706 words

为什么分布式系统没有完美时钟:从Lamport到TrueTime的四十年博弈

1978年,Leslie Lamport在《Time, Clocks, and the Ordering of Events in a Distributed System》论文的开篇写道:“A distributed system can be described as one in which the failure of a computer you didn’t even know existed can render your own computer unusable.” 他当时大概没想到,这篇论文定义的"happened-before"关系,会成为分布式系统此后近五十年的基石。 ...

10 min · 4972 words

分布式事务为何成了架构师的噩梦——从两阶段提交到Saga模式的技术权衡

1978年,图灵奖得主Jim Gray在《Notes on Data Base Operating Systems》中正式描述了两阶段提交协议(Two-Phase Commit, 2PC)。这个协议的核心目标简单而直接:让分布在不同机器上的多个数据库,能够像操作单一数据库一样实现"全有或全无"的原子性保证。 ...

15 min · 7231 words

时序数据库如何用1.37字节存储一个数据点:从压缩算法到存储引擎的十五年演进

2015年,Facebook的监控团队面临一个看似无解的问题:每秒产生700万个数据点,如果按照传统方式存储,仅内存就需要16TB。这个数字意味着任何规模的集群都无法在经济上承受。但他们最终找到了答案——通过一种称为Gorilla的压缩算法,将每个数据点从16字节压缩到平均1.37字节,压缩比达到12倍。 ...

11 min · 5296 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