数据库性能的天花板在硬件
无论查询优化器多么聪明、索引设计多么精妙,一条 SQL 最终都要落到 CPU 上计算、从内存或磁盘取数据。数据库的许多”反直觉”设计,本质上都是为了顺应硬件的物理特性:
┌────────────────────────────────────────────────────────┐
│ 数据库系统 │
├────────────────────────────────────────────────────────┤
│ 查询引擎 / 索引 / 事务 ← 软件层面的优化 │
├────────────────────────────────────────────────────────┤
│ CPU │ 内存(RAM) │ SSD │ HDD ← 硬件特性 │
│ ~1ns │ ~100ns │ ~100μs │ ~10ms │ 速度差千万倍
└────────────────────────────────────────────────────────┘
一个关键事实:越靠近 CPU 的存储越快,但越贵、容量越小。从寄存器到磁盘,延迟相差 7 个数量级:
| 存储层级 | 典型延迟 | 容量 | 易失性 |
|---|---|---|---|
| L1 Cache | ~1 ns | KB | 是 |
| L2/L3 Cache | ~10 ns | MB | 是 |
| 主存 (DRAM) | ~100 ns | GB | 是 |
| SSD (NAND) | ~100 μs | TB | 否 |
| HDD (磁盘) | ~10 ms | TB+ | 否 |
理解硬件能解决什么
- 为什么顺序 IO 远快于随机 IO? —— 见 机械硬盘 与 固态硬盘
- 为什么缓冲池能大幅提升性能? —— 因为内存比磁盘快 ~10⁵ 倍(见 内存)
- 为什么列式/向量化执行快? —— 因为 CPU 的 SIMD 与缓存行友好(见 CPU)
- 为什么 WAL 要先写日志? —— 因为顺序写 SSD/HDD 比随机写快得多
本系列内容
本系列从硬件视角拆解数据库性能的根因:
- CPU 工作原理:指令流水线、多级缓存、分支预测、SIMD
- 内存工作原理:DRAM 单元、刷新、带宽、NUMA
- 固态硬盘工作原理:NAND 浮栅、FTL、写放大、磨损均衡
- 机械硬盘工作原理:盘片、寻道、旋转延迟、IOPS
理解这些,你就能从”调参数”进阶到”从第一性原理设计存储与查询”。
参考
- Database Internals, Alex Petrov, Chapter 1
- Systems Performance, Brendan Gregg
- Latency Numbers Every Programmer Should Know