
OpenAI工程团队详细解析如何将PostgreSQL扩展至支撑8亿ChatGPT用户,每秒处理数百万次查询。文章深入探讨了单主架构、MVCC优化、查询调优、缓存策略、自动清理等关键技术,并总结了大规模数据库扩展的实战经验。
在人工智能浪潮席卷全球的今天,OpenAI的ChatGPT和API服务已成为数亿用户日常依赖的工具。而在这背后,一个看似“传统”的数据库系统——PostgreSQL,正默默支撑着每分钟数百万次的查询请求。本文由OpenAI技术团队成员Bohan Zhang撰写,深入解读了团队如何将PostgreSQL扩展至支撑8亿ChatGPT用户规模,并分享了关键工程优化经验。
多年来,PostgreSQL一直是ChatGPT和OpenAI API等核心产品的关键底层数据系统。随着用户基数快速增长,数据库负载在过去一年内增长了10倍以上,且仍在快速攀升。在优化生产基础设施的过程中,OpenAI团队发现了一个重要洞察:PostgreSQL可以扩展至可靠支持远超此前业界认知的读密集型工作负载。该系统最初由加州大学伯克利分校的科学家团队创建,如今已能通过单个Azure PostgreSQL灵活服务器主实例和近50个跨区域只读副本,支撑全球海量流量。
ChatGPT发布后,流量以前所未有的速度增长。为支撑这一增长,团队在应用层和PostgreSQL数据库层快速实施了广泛优化:纵向扩展(增加实例规格)和横向扩展(增加只读副本)。这一架构长期运行良好,并随着持续改进,为未来增长提供了充足空间。
单主架构能满足OpenAI规模的需求,这听起来或许令人惊讶。但实际落地并不简单。团队曾多次遭遇由PostgreSQL过载引发的服务事件(SEV),且这些事件往往遵循相似模式:上游问题导致数据库负载突然飙升——例如缓存层故障引发广泛缓存未命中、大量昂贵多表连接查询耗尽CPU、或新功能发布导致的写入风暴。随着资源利用率攀升,查询延迟上升,请求开始超时。重试机制进一步放大负载,形成恶性循环,可能导致整个ChatGPT和API服务降级。
尽管PostgreSQL在读密集型工作负载上扩展良好,但在高写入流量期间仍面临挑战。这主要归因于PostgreSQL的多版本并发控制(MVCC)实现,这使得它处理写密集型工作负载效率较低。例如,当查询更新一个元组甚至单个字段时,整个行都会被复制以创建新版本。在高写入负载下,这会导致显著的写放大。同时,由于查询必须扫描多个元组版本(死元组)以检索最新版本,读放大也随之增加。MVCC还带来了表和索引膨胀、索引维护开销增加以及复杂的自动清理(autovacuum)调优等额外挑战。(关于这些问题的深入探讨,可参考作者与卡内基梅隆大学Andy Pavlo教授合著的博客文章《The Part of PostgreSQL We Hate the Most》,该文已被PostgreSQL维基百科页面引用。)
为缓解这些限制并降低写入压力,团队已迁移并持续将可分片(即可水平分区的)写密集型工作负载迁移至Azure Cosmos DB等分片系统,并优化应用逻辑以减少不必要的写入。同时,团队不再允许在当前PostgreSQL部署中添加新表,新工作负载默认使用分片系统。
即使基础设施不断演进,PostgreSQL仍保持未分片状态,所有写入均由单个主实例处理。主要原因是分片现有应用工作负载将极为复杂且耗时,需要修改数百个应用端点,可能耗时数月甚至数年。由于工作负载主要为读密集型,且团队已实施广泛优化,当前架构仍为支持持续流量增长提供了充足空间。虽然不排除未来对PostgreSQL进行分片,但鉴于当前和未来增长有足够空间,这并非近期优先事项。
在后续部分,我们将深入探讨团队面临的挑战以及为解决这些问题并防止未来中断而实施的广泛优化,将PostgreSQL推向极限并扩展至每秒数百万次查询(QPS)。
挑战:单主架构只有一个写入者,无法扩展写入能力。严重的写入峰值可能迅速使主实例过载,影响ChatGPT和API等服务。
解决方案:团队尽可能减少主实例的负载——包括读和写——以确保其有足够容量处理写入峰值。读流量尽量卸载到副本上。但某些读查询必须保留在主实例上,因为它们是写入事务的一部分。对于这些查询,团队专注于确保其高效且避免慢查询。对于写流量,已将可分片的写密集型工作负载迁移至Azure Cosmos DB等分片系统。较难分片但仍产生高写入量的工作负载迁移时间较长,该过程仍在进行中。团队还积极优化应用以减少写入负载,例如修复导致冗余写入的应用错误,并在适当情况下引入延迟写入以平滑流量峰值。此外,在回填表字段时,严格执行速率限制以防止过度写入压力。
挑战:团队识别出PostgreSQL中若干昂贵查询。过去,这些查询的突然流量激增会消耗大量CPU,拖慢ChatGPT和API请求。
解决方案:团队采取多管齐下的策略。首先,通过慢查询日志和性能监控工具,系统性地识别出最耗资源的查询模式。针对每个高成本查询,团队进行了深度分析,包括执行计划、索引使用情况和数据分布。优化措施包括:添加缺失的索引、重写低效的SQL(例如将子查询转换为JOIN、避免SELECT *)、使用物化视图缓存复杂聚合结果、以及调整PostgreSQL配置参数(如work_mem、shared_buffers)以更好地匹配工作负载。对于某些无法优化的查询,团队通过应用层缓存(如Redis)或查询结果缓存来减少数据库命中次数。同时,团队建立了查询性能基线,并部署自动化告警,以便在查询延迟或资源消耗超过阈值时及时介入。
挑战:随着只读副本数量增加到近50个,管理这些副本的同步、延迟和故障转移变得复杂。副本延迟可能导致用户看到过时数据,而副本故障则会影响读服务的可用性。
解决方案:团队采用Azure PostgreSQL灵活服务器提供的托管副本功能,并辅以自定义监控和自动化脚本。关键措施包括:
挑战:在高写入负载下,MVCC产生的死元组会迅速累积。如果自动清理进程无法及时回收这些死元组,会导致表膨胀、索引效率下降,甚至引发事务ID回卷危机。
解决方案:团队对自动清理进行了精细调优。首先,根据每个表的写入频率和大小,设置不同的autovacuum_vacuum_scale_factor和autovacuum_vacuum_threshold参数,确保活跃写入的表得到更频繁的清理。其次,调整autovacuum_work_mem以加速清理过程中的索引扫描。对于某些超大表,团队采用分区表策略,将数据分散到多个物理分区中,每个分区可以独立进行清理,减少单次清理的负担。此外,团队开发了内部工具来监控死元组比例和表膨胀率,并在接近危险阈值时触发告警或手动干预。对于极端情况,团队会安排维护窗口执行VACUUM FULL或pg_repack来回收物理空间。
挑战:缓存层(如Redis或应用内缓存)的故障曾多次引发数据库负载尖峰。当缓存失效时,大量请求直接穿透到数据库,导致查询延迟飙升和连接池耗尽。
解决方案:团队实施了多层缓存策略。第一层是应用内本地缓存(如Caffeine),用于缓存频繁访问且变化不频繁的数据(如用户会话、配置信息)。第二层是分布式缓存(Redis集群),用于缓存数据库查询结果。关键优化包括:
挑战:在数百万QPS的规模下,任何微小异常都可能迅速放大为服务中断。传统的监控指标(如CPU、内存)不足以捕捉复杂的性能问题。
解决方案:团队构建了全面的监控与可观测性体系。除了基础指标,还重点监控以下定制化指标:
告警策略采用多级阈值和动态基线。例如,当P99延迟超过基线2倍时触发警告,超过5倍时触发紧急告警。团队还建立了告警疲劳抑制机制,避免重复告警淹没工程师。
通过上述优化,OpenAI成功将PostgreSQL扩展至支撑8亿用户,每秒处理数百万次查询。以下是团队总结的关键经验:
尽管当前架构运行良好,OpenAI团队仍在持续探索改进方向。未来可能的工作包括:
PostgreSQL作为一款开源数据库,在OpenAI的工程团队手中展现了惊人的扩展潜力。通过深入理解其内部机制、持续优化应用和数据库配置、构建自动化运维体系,PostgreSQL成功支撑了全球8亿用户的AI服务。这一案例证明了:在合适的场景下,传统关系型数据库依然能够胜任现代互联网规模的挑战。对于正在面临数据库扩展难题的团队,OpenAI的经验提供了宝贵的参考——在追求新技术之前,先充分挖掘现有工具的能力。
本文内容基于OpenAI技术博客原文,由专业SEO/GEO编辑翻译、改写并优化,旨在为中文读者提供深度技术洞察。
SEO & GEO 技术探索者,专注于搜索引擎优化和生成式引擎优化。

大多数企业仍将AI视为孤立实验,但领先者已将其视为一套价值模型组合。本文深入剖析五大AI价值模型——劳动力赋能、AI原生分发、专家能力、系统依赖管理与智能体运营,揭示企业如何从试点走向系统性价值重塑。

OpenAI发布GPT-5.6模型家族,旗舰模型Sol以不到一半成本超越Claude Fable 5。通过负载均衡、推测解码、内核优化等创新,实现智能与效率的双重突破,让AI更普惠。

OpenAI销售团队规模一年增长三倍,通过构建GTM Assistant智能助手,将顶尖销售经验系统化,实现销售生产力提升20%,让销售代表每周多出一天时间专注于客户关系。
获取最新的 SEO 与 GEO 技术资讯。
我们尊重您的隐私,随时可以取消订阅。