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

Firestore事务执行耗时超2分钟,云函数性能异常求助

Firestore事务性能异常(耗时数分钟)的排查与修复

问题根源

你的核心错误是事务内部的读写操作没有通过事务对象t执行,而是直接调用admin.firestore()发起了独立的Firestore请求:

  • Firestore事务要求所有在事务上下文内的读写操作,必须通过传入的事务对象t来执行,这样才能纳入事务的原子性控制逻辑。
  • 你代码里的set、update、delete都是直接调用Firestore实例方法,属于事务外的独立操作。事务会一直等待这些外部异步操作完成,再加上事务本身的锁机制,最终导致云函数耗时剧增到数分钟。

修正后的代码

所有操作必须通过事务对象t执行,以下是优化后的版本:

await admin.firestore().runTransaction(async (t) => {
    const document = await t.get(truthRef);
    if (document.data() !== undefined) {
        const roomRef = admin.firestore().collection("a").doc(b);
        // 所有操作通过事务对象t执行
        const transactionOps = [
            t.set(roomRef, c),
            t.update(roomRef, { messages: allMessagesHistory }),
            t.delete(oldTruthHistoryRef)
        ];
        await Promise.all(transactionOps);
    }
});

关键注意事项

  • 事务内的所有读写必须绑定事务对象t,不能直接调用Firestore实例方法,否则会破坏事务原子性,同时引发性能异常。
  • 简单的数据迁移/调整操作,只要正确使用事务对象,不会出现数分钟的耗时,性能和非事务模式差距极小。
  • 如果你的业务不需要严格的原子性(允许中间状态存在),可以继续用非事务方式;但如果需要保证数据一致性,必须修正事务的使用方式,而非直接放弃事务。

内容的提问来源于stack exchange,提问作者coolcool1994

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:17:46