Generated by Answer me with HTML 0.5.10 · 2026-11-01 21:45 · ★ Star on GitHub

問題出在記憶體延遲,笨蛋

Pivot 部落格實測+HN 討論懶人包

sourcePivot blog+HN 50318720

Lead: 資料庫 CPU 顯示 100% 不代表真的在幹活,一半時間都在等記憶體。把雜湊表切小塞進快取,做更多運算反而更快。

A

核心結論

快取命中換 DRAM 存取

單核查詢從 3.6 秒降到 1.8 秒,DRAM 拉取從 4.5 GB 降到 0.95 GB。做法是基數分割:先按雜湊高位分 4096 區,再逐區聚合。

B

記憶體階層

層級 延遲 容量
L1 快取 約 1 奈秒 約 64KB
L2 快取 約 3 至 4 奈秒 約 1MB
L3 快取 約 10 至 15 奈秒 最大數百 MB
DRAM 約 50 至 100 奈秒 數 GB
C

查詢耗時對比

0s1s2s3s4s3.6s天真版2.7s基數分割1.848sPivot 正式版單核0.172sPivot 正式版 16 核
資料
天真版3.6s
基數分割2.7s
Pivot 正式版單核1.848s
Pivot 正式版 16 核0.172s
D

效能計數器對比

指標 天真版 基數分割
因等記憶體停滯 50.1% 23.5%
真正執行運算 16.1% 32.2%
DRAM 拉取 4.5GB 1.5GB
E

基數分割兩階段

按雜湊高 12 位元分 4096 區逐區建小雜湊表聚合合併各區結果查詢第一階段第二階段輸出
F

HN 網友五派觀點

主題 一句話
機械同理心 懂硬體怎麼動的人越來越少,是失傳技藝
過早最佳化 這句話被濫用成擋掉效能重構的藉口
快取對乾淨程式碼 教科書結構假裝沒有快取,指標追逐是慢性自殺
新穎性質疑 基數分割是老技術,作者本來就沒宣稱發明
延伸閱讀 重讀經典記憶體長文,比等 2026 重寫版實在
G

出處

原文
Pivot 官方部落格
HN 主串
50318720,分數 221,留言 72
測試機
AMD EPYC 9124,16 核,128GB DDR5
資料集
ClickBench hits,9900 萬列,1700 萬分組