内容提要
Supabase发布三项Postgres扩展:Multigres提供可扩展连接池与自动多节点故障转移,确保故障时不丢失已提交写入;OrioleDB替代传统堆存储,消除表膨胀和VACUUM开销,支持64位事务ID,吞吐量最高提升1.8倍;dbarena提供公开可复现的托管Postgres基准测试,用于比较性能与成本。
延伸解读
Multigres 如何保障故障时不丢数据
传统主备架构中,若主库在数据复制到备库前发生故障,已提交的写入可能丢失。Multigres 基于 Postgres 同步复制构建了通用共识协议,故障时集群会先就哪些写入已提交达成一致,再接受新写入,并在数秒内提升副本。因此,已提交的写入在故障转移过程中不会丢失。它跨可用区运行三个 Postgres 节点,单区故障不会导致数据库宕机。
OrioleDB 消除表膨胀与 VACUUM 开销的机制
Postgres 堆存储中,每次更新都会写入新行版本并留下死元组,在频繁更新删除的热表上造成膨胀,需要持续 VACUUM 清理,而 VACUUM 是负载下性能下降和宕机的常见原因。OrioleDB 用撤销日志替代堆存储,更新和删除只写入页级撤销记录,系统自动回收,从而彻底消除膨胀,不再需要 VACUUM。无锁页读取也使其在高并发下更高效。
64 位事务 ID 为何在 OrioleDB 中可行
Postgres 使用 32 位事务 ID,约 40 亿次事务后可能回卷,迫使数据库积极冻结旧行。在堆存储中,事务 ID 直接存储在每个元组中,扩展到 64 位会给每个行版本增加 8 字节,并因死元组的存在而放大为更多页面、I/O、缓存压力和更大索引。OrioleDB 用撤销日志替代基于 VACUUM 的 MVCC,绕开了这一限制,因此可以默认使用 64 位事务 ID 而无需继承堆的旧元组格式。
dbarena 为托管 Postgres 选型提供可复现基准
开发者评估托管 Postgres 时缺乏可信的对比来源:厂商基准条件有利,社区基准多为一次性快照,内部严格评估耗时数周。dbarena 发布开放、可复现的基准测试,提供基准代码、公开方法论、可下载的原始数据以及可分享的对比链接。启动时对比 Supabase、Amazon RDS 和 Google Cloud SQL,每次运行报告每美元事务数、月度总成本、每分钟事务数、p95 和机器规格,并绘制吞吐量随时间变化。
Q&A
Multigres 是什么?它解决了 Postgres 的哪些问题?
Multigres 是 Supabase 发布的开源 Postgres 操作系统,由 Vitess 团队打造。它提供可扩展的连接池和自动多节点故障转移,无需单独运行连接池器,应用可连接远超单实例限制的客户端。它使用基于同步复制的通用共识协议,故障时能保留所有已提交写入,并在几秒内提升副本,确保高可用性。
OrioleDB 如何消除表膨胀和 VACUUM 开销?
OrioleDB 用撤销日志替代传统堆存储的基于 VACUUM 的 MVCC。更新和删除时写入页面级撤销记录,系统自动回收,而不是留下死元组。这从根本上消除了表膨胀,不再需要 VACUUM,同时无锁页面读取在高并发下更高效。
OrioleDB 相比 Postgres 堆存储性能提升多少?
根据 dbarena.com 上公开的 TPC-C 衍生基准测试,OrioleDB 的吞吐量比 Postgres 堆存储最高提升 1.8 倍。
dbarena 是什么?它提供哪些信息?
dbarena 是 Supabase 推出的开放基准测试网站,用于比较托管 Postgres 提供商的性能和成本。它发布可复现的基准测试,包括基准代码、公开方法、可下载的原始数据以及可分享的比较链接。启动时比较 Supabase、Amazon RDS 和 Google Cloud SQL,每次运行报告每美元事务数、月度总成本、每分钟事务数、p95 和机器规格,并绘制吞吐量随时间的变化。
Multigres 和 OrioleDB 目前可用性如何?
Multigres 处于私有 alpha 阶段,需邀请才能使用,适用于测试而非生产负载。OrioleDB 处于公开 beta 阶段,创建新项目时可在高级配置中选择,也支持按表混合使用堆存储和 OrioleDB。
OrioleDB 如何解决事务 ID 回绕问题?
OrioleDB 默认使用 64 位事务 ID(XID),避免了 Postgres 32 位 XID 约 40 亿事务后回绕的问题。由于 OrioleDB 用撤销日志替代堆的基于 VACUUM 的 MVCC,事务元数据可以使用 64 位 XID 而不继承堆的遗留元组格式,因此不会像堆存储那样因扩展 XID 而增加每行 8 字节的开销。