You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Cosmos DB MongoDB API 20个并行只读事务触发Transaction not active错误

问题根因

  • 你遇到的报错本质是触发了Azure Cosmos DB MongoDB API的单物理分区并行活跃事务上限,该阈值默认固定为20,这也是你20个并行请求100%复现、19个请求正常的直接原因。
  • 哪怕是只读事务,在Cosmos DB的实现逻辑中也会占用分区的事务会话槽位、分配快照资源,会计入活跃事务配额统计,不会因为事务标记为readOnly就豁免。
  • 报错的直接表现是:第20个并行事务发起时,服务端直接拒绝事务初始化,但客户端没有捕获到该异常,后续Spring Data MongoDB的MongoTransactionManager按正常流程提交事务时,就会抛出Transaction is not active的错误。

解决方案

1. 分区流量拆分

调整集合的分片键策略,让你的事务请求分散到不同的物理分区上,每个物理分区独立享有20个并行活跃事务的配额,可直接提升整体事务并发承载能力。

2. 配置针对性重试逻辑

对返回的BadRequest(400)+Substatus: 1101错误,添加指数退避重试逻辑:

  • 可通过Spring的重试注解@Retryable,指定针对该异常场景做最多3~5次的退避重试
  • 注意不要设置过高的重试次数,避免触发服务端的流控限制

3. 非必要场景规避事务使用

如果你的场景仅需要单次读的结果一致性,不需要在同一个事务内执行多次读操作,可以直接关闭事务,将读请求的一致性级别调整为会话一致性,即可获得和只读事务一致的快照读效果,同时不会占用事务配额。

4. 申请配额提升

如果以上优化都无法满足你的业务并发需求,可以联系Azure客户支持,申请提升对应Cosmos DB账户的单分区并行活跃事务上限。

内容的提问来源于stack exchange,提问作者der.Schtefan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:24:03