Shaun Thomas:从战壕中走来:我的Postgres之路

Shaun Thomas:从战壕中走来:我的Postgres之路

💡 原文英文,约2800词,阅读约需10分钟。
📝

内容提要

作者回顾了20多年与PostgreSQL的深厚渊源,从早期因VACUUM缺陷提交reindexdb工具,到担任DBA处理大型数据库危机,优化配置、升级硬件、构建高可用集群,并开发管理工具。他通过会议演讲和文章分享经验,最终成为Postgres专家,强调社区贡献与知识传承的重要性。

🔎

延伸解读

早期Postgres的运维痛点

作者在2002年因VACUUM缺陷提交reindexdb工具,并曾因2GB的膨胀问题而抱怨。当时Postgres 7.x的VACUUM需要排他锁,且无法清理索引,导致作者一度转向MySQL。这段历史反映了早期Postgres在运维上的不足,也解释了为何后来作者对Postgres的改进如此敏感。

DBA的实战经验与调优

作者在2005年加入一家Postgres公司,面对7.4版本的严重膨胀问题,通过逐表VACUUM FULL解决了磁盘危机。在金融公司,他调整了shared_buffers、work_mem等关键参数,并更换为Fusion-io NVMe设备,解决了冷缓存性能问题。这些经验表明,正确的配置和硬件升级对高负载数据库至关重要。

高可用与工具创新

作者在2010年代构建了基于DRBD、Corosync和Pacemaker的高可用栈,替代了昂贵的商业方案,并开发了ElepHaaS进行集群管理。这些工具在当时填补了空白,也体现了社区驱动的创新精神。作者强调,这些方案后来被Patroni等更现代的工具取代,但核心思想仍值得借鉴。

知识传承与社区贡献

作者通过撰写文章、演讲和开发工具,将实战经验回馈社区。他认为,AI工具可能让专业知识更易获取,但理解全局和最佳实践仍需经验。他鼓励读者参与Postgres社区,强调知识共享的价值。

Q&A

Shaun Thomas 在 2002 年对 PostgreSQL 做了什么贡献?

他在 2002 年提交了 reindexdb 工具,用于重建索引,以解决当时 VACUUM 无法清理索引的 bug。

在 2005 年加入新公司时,作者遇到了什么严重的 Postgres 问题?

新公司的数据库运行在 7.4 版本,且 max_fsm_pages 参数保持默认值 200,000,导致数据库无限膨胀,几乎耗尽磁盘空间。

作者在金融公司是如何解决备份和恢复速度慢的问题的?

他编写了自己的备份工具,利用文件系统复制和硬链接实现增量备份,并使用 xargs 进行并行操作,将备份时间缩短到约 20 分钟,同时解决了恢复失败的问题。

作者在金融公司优化了哪些 PostgreSQL 配置参数?

他调高了 shared_buffers、work_mem、effective_cache_size,将 random_page_cost 从默认的 4.0 调低,将 checkpoint_completion_target 从 0.5 调高,并增加了 checkpoint_segments。

作者在金融公司是如何解决存储性能瓶颈的?

他尝试了短击 RAID 获得 20% 提升,但最终采用了 Fusion-io 的 NVMe PCIe 设备,提供 150k IOPS,彻底解决了冷启动性能问题。

作者在金融公司构建的高可用架构包含哪些组件?

该架构使用 DRBD 进行块设备复制,LVM 管理存储,Corosync 进行集群通信,Pacemaker 作为资源管理器,并配置了 VIP 和 gratuitous ARP。

作者开发了哪些工具或系统来管理 Postgres 集群?

他开发了 ElepHaaS(Elephant Herd as a Service)用于协调管理多个 Postgres 集群的切换、备份和健康检查。

作者是如何开始撰写 Postgres 文章的?

他最初在内部 Confluence 页面为开发团队撰写关于反模式和性能技巧的文章,后来获得许可公开发布,最终形成了 PG Phriday 系列。

作者对 AI 工具在 Postgres 领域的看法是什么?

他认为 AI 工具将使许多专业知识变得容易获取,但他也指出构建稳定可靠的工程仍需要有人理解全局。

🏷️

标签

➡️

继续阅读