Drizzle ORM 连接 TiDB Cloud Serverless 使用 $returningId() 出错求助

我们的数据库是 TiDB Cloud serverless,产品框架 Hono,使用 @drizzle-orm/tidb-serverless + @tidbcloud/serverless 连接数据库。产品部署在 Cloudflare Worker 上面。

之前一切正常,近期(不超过2周)突然遇到 worker memory exceed limits 错误,只有在生产环境上才会稳定复现。因为 Cloudflare Worker 只有 128MB 内存,本地内存比较富裕。经过一段时间的排查(二分切割法),最终基本确定是下面这段代码的问题:

    const uid = (
      await this.client
        .insert(schema.users)
        .values({
          externalId: externalId,
          firstName: firstName,
          lastName: lastName,
          email: email.toLowerCase(),
        })
        .$returningId()
    )[0];
    return uid.id;

$returningId() 去掉,然后单独写一个 query 就没问题了。

目前虽然问题已经解决,但我担心是不是没找对地方,所以发出来请教一下大家,看有没有人遇到过类似的问题,或者听说过类似的问题。

1 个赞

没有遇到过

1 个赞

TiDB Cloud serverless 结合 drizzle 的 $returningId () 可能在 Worker 中触发内存泄漏。

1 个赞

要不拆分查询规避 试试

1 个赞

从这个问题可以延伸出很多思考,感谢楼主抛砖引玉。

感谢分享,这个问题很典型,解决方案很实用!

这个问题在实际工作中经常遇到,楼主的方案很有参考价值。