跳轉到

RDS PostgreSQL Connection Pool (Transaction Mode)

概念概覽

連線數瓶頸量化

核心知識

連線數瓶頸量化

  • RDS db.r6g.2xlarge(32GB RAM)max_connections ≈ 3,604
  • 500 Pod × 預設連線池 = 41,472 條,超出上限 11.5 倍
  • 壓測佐證:200 CCU 時 144 個 DB 連線中最多只有 4 個 active,idle 率 97% → 這是 Transaction Mode 可行的關鍵前提

Transaction Mode 限制(部署前必查)

  • 不支援 prepared statements(需 App 端調整)
  • 不支援 LISTEN/NOTIFY
  • 只在 App 真正執行 SQL 時借用真實連線,讓 41k App 連線共用約 2,000–3,000 條真實連線

RDS Proxy vs PgBouncer 選擇依據

RDS Proxy PgBouncer
管理成本 AWS 托管,自動 scale 需自行維護 HA
費用 ~$0.015/hr per vCPU 開源免費
連線上限 自動 scale 單進程建議上限 10,000–50,000

連線數需求 < 50k 且不想管理 HA,優先 RDS Proxy;需要精細控制且已有 K8s 運維能力,選 PgBouncer。

經驗教訓

  • idle 率是判斷 Transaction Mode 是否值得引入的核心指標,壓測時必須量測

  • RDS Proxy 費用以 vCPU 計算,升規格會連帶增加 Proxy 費用,需一併考量

  • PgBouncer 單進程瓶頸在 10k–50k 連線,超出需多進程或改用 RDS Proxy

常見陷阱

  • Transaction Mode 與 prepared statements 不相容,部署前未確認 App 端用法會導致功能異常

  • 升級 RDS 規格(如 db.r6g.4xlarge)max_connections 只到 ~7,200,仍遠不足 41,472,規格升級無法替代連線池

最佳實踐

  • 先從壓測數據取得 active/idle 比率,再決定是否引入 Transaction Mode

  • 部署 Pooler 後必須壓測 Pooler 本身的延遲影響,而非只看 RDS 端指標

  • PgBouncer 部署於 EKS 時需配置 PodDisruptionBudget 確保 HA

相關概念

來源 Sessions

日期 Session 貢獻摘要

| 2026-03-25 | 135234ac-cc13-4bd9-92f0-c123f2169ae2 | 建立從壓測數據(idle 率 97%)推導 Transaction Mode 可行性的量化方法,並完整比較 RDS Proxy 與 PgBouncer 的適用邊界 |


本概念頁面由 Semi-Brain Wiki 系統自動維護

最後更新: 2026-03-25