TGViewer
开发者工具箱|编程·开发工具·资源 开发者工具箱|编程·开发工具·资源 @devtoolboxhub · 779 subscribers
Post #1430 6
Running Postgres at Scale – 百万级用户的运维教训

运营拥有百万级用户的 Postgres 产品过程中,作者几乎踩遍了所有坑。以下是希望第一天就知道的经验:

Autovacuum 不是可选项。可以暂时忽略,但不能永远忽视。死元组不断累积,查询计划变差,原本 10ms 的查询最终变成 3 秒且原因不明。尽早调优,大表上 autovacuum_vacuum_scale_factor = 0.05 是一个好起点。
连接池不是可选项。Postgres 连接昂贵——每个连接都持有内存和工作进程。用 PgBouncer 等工具,保守设置池大小。应用可能想要 500 连接,但合理池化后 Postgres 能轻松处理 50。
长事务是沉默的杀手。打开 2 小时的事务会阻止 vacuum 清理其开始时间之后的新元组,导致表膨胀、查询变慢。对 pg_stat_activity.xact_start < now() - interval '10 minutes' 设置告警,主动杀掉长事务。
查询计划器并非魔法。它是一个成本估算器,可能出错。看到应该走索引却走全表扫描的查询时,计划器认为全表扫描更便宜,但估算可能是错的。定期 ANALYZE,增大大表的 default_statistics_target,debug 时可用 SET enable_seqscan = off。
未经过恢复验证的备份不是备份。每月用真实数据量演练恢复。作者首次尝试恢复 800GB 生产备份用了 11 小时——在故障发生前知道这一点至关重要。


Postgres 非常宽容,但只对那些尊重它的人。

#开发者 #工具 #Postgres #数据库 #SRE #DevOps #运维 #性能优化 #教训
@DevToolboxHub
More from @devtoolboxhub
  1. Sep 28, 2026SaveNowX 无落盘下载 X 视频的架构设计 SaveNowX 是一个免费工具,把公开的 X(Twitter)帖子解析成可下载的视频,无需账号、无水印、不留历史记录。作者在开发…
  2. Sep 28, 2026GitHub 的 pull_request_target 改动会破坏什么 GitHub 今年调整了 pull_request_target 的运作方式,两项带日期的变更会影响所有使…
  3. Sep 27, 2026Instagram 字体生成器:把普通文字换成 Unicode 样式 Instagram 字体生成器是一类在线工具,把普通字母转换成外观不同的 Unicode 字符,再复制粘贴到…
  4. Sep 27, 2026用一个下午审计公司里的重复性工作 多数公司不需要耗时半年的转型项目,才能发现时间到底流失在哪里。花几个小时追踪三个真实工作流,就能看出很多问题。关键不是问团队哪里效率低,也不是凭记…
  5. Sep 27, 2026竞品关键词调研的自动化流程 从竞品差距分析导出两万个关键词,约一半只是同一词换了词序。真正的瓶颈在导出之后那一小时:一个好问题变成一堵近似重复词组成的墙,外加三种不同口径的搜索量。…
  6. Sep 26, 2026PostgreSQL 复制槽上限参数 max_replication_slots 解析 max_replication_slots 决定共享内存中复制槽数组的长度,仅此而已。它不决…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →