Generated by Answer me with HTML 0.5.10 · 2026-11-01 21:45 · ★ Star on GitHub
問題出在記憶體延遲,笨蛋
Pivot 部落格實測+HN 討論懶人包
Lead: 資料庫 CPU 顯示 100% 不代表真的在幹活,一半時間都在等記憶體。把雜湊表切小塞進快取,做更多運算反而更快。
核心結論
快取命中換 DRAM 存取
單核查詢從 3.6 秒降到 1.8 秒,DRAM 拉取從 4.5 GB 降到 0.95 GB。做法是基數分割:先按雜湊高位分 4096 區,再逐區聚合。
記憶體階層
| 層級 | 延遲 | 容量 |
|---|---|---|
| L1 快取 | 約 1 奈秒 | 約 64KB |
| L2 快取 | 約 3 至 4 奈秒 | 約 1MB |
| L3 快取 | 約 10 至 15 奈秒 | 最大數百 MB |
| DRAM | 約 50 至 100 奈秒 | 數 GB |
查詢耗時對比
資料
| 天真版 | 3.6s |
|---|---|
| 基數分割 | 2.7s |
| Pivot 正式版單核 | 1.848s |
| Pivot 正式版 16 核 | 0.172s |
效能計數器對比
| 指標 | 天真版 | 基數分割 |
|---|---|---|
| 因等記憶體停滯 | 50.1% | 23.5% |
| 真正執行運算 | 16.1% | 32.2% |
| DRAM 拉取 | 4.5GB | 1.5GB |
基數分割兩階段
HN 網友五派觀點
| 主題 | 一句話 |
|---|---|
| 機械同理心 | 懂硬體怎麼動的人越來越少,是失傳技藝 |
| 過早最佳化 | 這句話被濫用成擋掉效能重構的藉口 |
| 快取對乾淨程式碼 | 教科書結構假裝沒有快取,指標追逐是慢性自殺 |
| 新穎性質疑 | 基數分割是老技術,作者本來就沒宣稱發明 |
| 延伸閱讀 | 重讀經典記憶體長文,比等 2026 重寫版實在 |
出處
- 原文
- Pivot 官方部落格
- HN 主串
- 50318720,分數 221,留言 72
- 測試機
- AMD EPYC 9124,16 核,128GB DDR5
- 資料集
- ClickBench hits,9900 萬列,1700 萬分組