2026 年 9 月 29 日前后,MongoDB 在 Investor Day 上宣布 MongoDB 9.0 正式可用。官方相对 8.0 给出的数字是:大实例吞吐最高约 2 倍、读最高约快 35%、更新最高约快 30%。同期运维侧还有 Atlas Infinite(存算独立伸缩,AWS 公有预览),本文只顺带交代,不展开 Agent Engine。

下文数字与能力均对齐官方博客、9.0 发行说明 以及同日 PR Newswire。未写进这些材料的外推一律不写。发行说明日期显示 9.0.0 落在 2026-09-28,与次日 Investor Day 对外口径衔接。

相对 8.0 的性能表述(务必带条件)

官方博客原文写的是:Compared with MongoDB 8.0,9.0 delivers up to 2x higher throughput on large instances、35% faster reads、30% faster updates,并称在规模下显著改善性价比(price-performance)。

PR 稿把读/写拆得更细,并加了基准脚注(*Benchmark data compared to MongoDB 8.0):

官方表述(英文) 中文转述时建议保留的限定
Up to 2x throughput on large instances 「最高约」「大实例」
Up to 35% faster find-one queries 「最高约」「find-one」
Up to 30% faster update-one queries 「最高约」「update-one」
Up to 20% higher throughput for transactional workloads 「最高约」「事务工作负载」

PR 还写明:这些数字是与 Atlas Gen2 计算层的性价比改进放在一起讲的。也就是说,对外材料里的「更快、更省」并不等于「裸机 Community Edition 上随便跑个业务就能翻倍」。评估时要对照自己的实例规格、读写比例和是否落在 find-one / update-one / 事务路径上。博客口径偏概括(reads / updates),PR 口径点名 find-one / update-one;对外沟通时建议同时引用并标明出处。

发行说明本身不以 benchmark 表开门。运维侧更值得盯的是一组默认就改变资源边界的行为。

运维与架构侧:资源边界、可观测、安全

单操作内存与并发事务上限

9.0 起,单个查询操作的总内存使用有硬上限:默认取 1 GB 与 进程可用内存的 20% 二者中较大者。超限会以 ExceededMemoryLimit 或 QueryExceededMemoryLimitNoDiskUseAllowed 失败。早前版本里单操作内存可以无界增长。阶段级 100 MB 限制与 spill-to-disk 行为则保持不变。相关运行时可见 serverStatus 里的 metrics.query.configuredMaxMemoryUsageBytesPerOperation、metrics.query.operationsFailedDueToMemoryLimit、metrics.query.peakMemoryUsageOperation 等字段。

多文档事务方面,外部客户端并发打开的事务数受 maxConcurrentMultiDocumentTransactions 约束,默认 10000。触顶后新事务会被拒绝,错误为 TooManyOpenTransactions。另有 metrics.operation.writeConflictRetryLimitHit / metrics.operation.writeConflictRetryWaiters 等写冲突相关指标可一并接入。

这两项对突发读写(例如一批长聚合或短事务风暴)都有直接含义:升级后要先在预发把内存与事务指标接进告警,等生产第一次撞到默认值再补救会很被动。

升级后可用类似方式抽查当前配置与失败计数:

db.adminCommand({ getParameter: 1, maxConcurrentMultiDocumentTransactions: 1 })
db.serverStatus().metrics.query

$queryStats 与 Change Stream 指标

9.0 起 $queryStats 默认对读和写采样收集(覆盖面是样本,不是每一次操作)。读采样率由 internalQueryStatsSampleRate 控制,写由 internalQueryStatsWriteCmdSampleRate 控制,二者默认均为 0.01(约 1%)。输出因此是样本子集。输出结构也整理成了 metrics.cursor、metrics.queryExec、metrics.queryPlanner、metrics.writes 等分组,并且对 update / insert / delete 也会收集 query statistics。

serverStatus 新增大量 Change Stream 相关指标(打开游标数、生命周期、错误分类、选项使用情况等)。replSetGetStatus 在逻辑 initial sync 期间额外暴露 phase、totalAttempts、bytesPerSecond 等阶段信息。审计日志则增加了 directRemote(mongo schema)/ direct_endpoint(OCSF schema),记录与 PROXY 头无关的真实 TCP peer。若你们已按旧字段名做监控,注意 metrics.changeStreams.showExpandedEvents 已更名为 metrics.changeStreams.option.showExpandedEvents。

PR 侧还提到增强 OpenTelemetry 支持,以及 Intelligent Workload Management(过载时保护集群、尽量让短操作继续)。后者在发行说明里没有以同名章节出现,部署时应以 Atlas / EA 产品文档为准,不要把 PR 营销句直接当成 Server 参数名。

Queryable Encryption:前缀 / 后缀 / 子串查询 GA

发行说明写明:Queryable Encryption 对加密字符串字段的 prefix、suffix、substring 查询在 9.0 达到 GA。用 mongosh 时需单独下载 Automatic Encryption Shared Library 9.0+,并通过 --cryptSharedLibPath 指定路径。同期 mongocryptd 被标记为 deprecated,官方导向 Shared Library,不再要求另起进程。

官方博客对应表述较概括:Queryable Encryption now protects more types of data in more situations;并提到 Atlas 扩展私有网络,方便强监管行业把敏感负载放上 Atlas。PR 补充的说法是:可在不解密的前提下对敏感信息做上述查询。若现网仍依赖 mongocryptd,升级窗口里要把 Shared Library 分发、路径参数和回归用例一起排进计划。

其它与运维相关的变更摘录

发行说明里还有几条升级时容易踩到的点:

  • 服务端 JavaScript($accumulator / $function / $where)在 8.0 被弃用后,9.0 用基于 WASM 的引擎重新启用,并强调更强沙箱隔离;ppc64le 上仍不可用。
  • BSON 校验:net.wireObjectCheck 及相关 CLI 弃用;9.0 默认校验服务端摄入的全部 BSON,非法数据直接报错。
  • 文档校验新增 constraint 级别:对所有插入与更新强制校验,并保证集合内文档都满足规则。
  • Time Series:以单命名空间存桶压缩数据,不再是可写的非物化视图;支持 renameCollection。单库超过约 5000 个 time series collection 时,升级可能更慢并出现额外写延迟尖峰。
  • 空值语义:点路径对 null 的比较语义有变更,升级后同类查询结果可能不同,需对照 Compatibility Changes。
  • 分片元数据一致性:checkMetadataConsistency 增补若干 inconsistency 类型,并提供按 chunk 数量阈值切换严格/轻量校验的选项。

Atlas Infinite:同日运维配套,点到为止

Atlas Infinite 与 9.0 同日宣布,定位是 Atlas 内新的集群类型:存储与计算独立伸缩。官方博客给出的运维向数字包括:扩缩时间缩短超过 96%,单 shard 可承载存储约为原来的 10 倍。公有预览从 AWS 开始,多云留到 GA。应用侧宣称无需改写即可选用,驱动、API 与既有运维工具链可沿用。

PR 补充:内部测试在 MongoDB 9.0 上,Atlas Infinite 相对 Atlas Core 可提供 189% more throughput per dollar(吞吐/美元);现有 Atlas 产品线改称 Atlas Core,与 Infinite 并列可选。定价改为与实际计算与存储消耗挂钩。这些是托管层能力,不替代自建 9.0 的容量规划,也与 Community / EA 二进制发布线分开评估。

(Atlas Agent Engine 同日发布,属 Agent 专栏范围,本文不展开。)

升级前建议核对的事项

把「官方最高约」翻译成自家环境,至少要做三件事:

  1. 在接近生产的负载下复测 find-one / update-one / 多文档事务路径,对照 8.0 基线,不要直接套用 2× / 35% / 30%。
  2. 打开并观察新的内存、事务并发、$queryStats 采样与 Change Stream 指标,确认告警阈值和 dashboard 字段名已更新。
  3. 若使用 Queryable Encryption 或 CSFLE,规划 Shared Library 替换 mongocryptd,并单独验证前缀/后缀/子串查询路径。

发行说明里 9.0.0 / 9.0.1 / 9.0.2 仍记录过 step-up 挂起类已知问题,说明写明 9.0.3 修复。上生产时优先跟到含该修复的补丁线,并继续关注 Security Bulletin(9.0.1 曾包含 CVE-2026-89099 相关修复)。

参考

— 感谢阅读 —

一起交流

分享你的思考,让讨论更进一步。