PostgreSQL Checkpoint IO Storm¶
概念概覽
Checkpoint IO 風暴的診斷方法¶
核心知識¶
Checkpoint IO 風暴的診斷方法¶
從壓測 P3 數據提取 WAL 速率,線性推算規模需求:
壓測 P3 實測 Checkpoint WAL:4.26–6.01 MB/s
推算 100k CCU:(100,000 / CCU_baseline) × 實測值 ≈ 2,130–3,005 MB/s
gp3 100GB 上限:125 MB/s
超出倍數:~17x
gp3 Volume Striping 機制(關鍵隱藏機制)¶
- storage ≥ 400GB 時 AWS 自動啟用 4 volume striping
- throughput 從 125 MB/s 免費提升至 500 MB/s,無需購買 Provisioned Throughput
- 只需付儲存空間費用,是解決 Checkpoint IO 問題最具成本效益的方案
- 若 500 MB/s 仍不足,可購買 Provisioned Throughput(最高 4,000 MB/s,但需額外計費)
Checkpoint 風暴的症狀特徵¶
與連線數瓶頸(拒絕新連線)不同:
- 表現為**週期性瞬間全服卡頓**,而非持續高延遲
- 遊戲玩家可感知的週期性卡頓,需與連線數問題分別診斷
- 設定 checkpoint_completion_target=0.9 可讓 Checkpoint 分散完成,緩解 IO 峰值
經驗教訓¶
-
Checkpoint IO 風暴與連線數瓶頸是**並行存在**的獨立問題,解決其中一個不能消除另一個
-
gp3 volume striping 是免費的,升級儲存至 400GB+ 前應先確認是否已達臨界點
-
症狀診斷:連線數瓶頸 → 新連線被拒;Checkpoint 風暴 → 所有連線週期性卡頓
常見陷阱¶
-
只關注 RDS CPU/RAM 指標,忽略 WAL throughput 和 Checkpoint 頻率,導致漏掉 IO 瓶頸
-
gp3 100GB 的 125 MB/s 上限在中低 CCU 壓測時不明顯,只有接近目標 CCU 時才爆發
最佳實踐¶
-
容量規劃壓測時必須同時量測 WAL 寫入速率和 Checkpoint 頻率
-
RDS gp3 儲存規劃:優先升至 400GB 觸發免費 striping,再評估是否需要 Provisioned Throughput
-
production 環境設定 checkpoint_completion_target=0.9 作為基本調優
相關概念¶
- CCU Capacity Planning(壓測數據推算法)
- RDS PostgreSQL Connection Pool (Transaction Mode)
- rds-proxy----dangling---
相關視角¶
以下頁面與本概念共享主題,但從不同角度切入。保留獨立視角同時提供交叉參考:
- Aurora IO Pricing — 共享:
capacity-planning,wal/ 獨特:100k-ccu,aurora
來源 Sessions¶
| 日期 | Session | 貢獻摘要 |
|---|---|---|
| 2026-03-25 | 135234ac-cc13-4bd9-92f0-c123f2169ae2 | 從壓測 WAL 數據線性推算 100k CCU 的 Checkpoint IO 需求,並揭示 gp3 ≥400GB 觸發 volume striping 的免費 throughput 提升機制 |