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

升级至Rails 7后Active Record类型映射查询性能问题排查

TL;DR
针对Active Record的某次提交旨在降低初始类型映射查询的开销,但从Rails 6.1.7升级至7.0.4后,该查询耗时远超之前版本,无法确定原因。

补充说明

升级至PostgreSQL 14解决了该问题,执行时间从9656.222 ms降至60.618 ms。


将应用从Rails 6.1.7升级至7.0.4后,我们在Amazon RDS上的PostgreSQL实例出现性能问题,部署完成后CPU使用率达到100%,实例宕机。

CPU使用率图表

查看数据库日志后,发现大量类型映射查询的记录,该查询会在创建新数据库连接时触发。

类型映射查询日志

我们的log_min_duration_statement设置为10000,即会记录所有耗时超过10秒的语句。

Rails升级前,该类型映射查询每天仅出现几次,平均耗时11秒;升级后,该查询频繁出现,耗时在13秒到90秒之间波动。

我已整理了两个版本的查询及EXPLAIN (ANALYZE, BUFFERS)的结果:

  • Rails 7版本
  • Rails 6版本(升级前)

我注意到此次提交修改了类型映射查询以降低开销,但在我们的应用中却产生了相反的效果,问题似乎出在query_conditions_for_known_type_types方法生成的语句上。

当前我们的环境配置如下:

  • Rails 7.0.4(从6.1.7升级)
  • Ruby 3.1.2
  • Amazon RDS上的PostgreSQL 13.7
  • 多租户数据库:单个数据库中每个租户拥有独立schema(约2000个schema)
  • ros-apartment gem
  • good_job(20线程+外部执行模式)

请问有什么思路可以解释我们遇到的该查询性能问题?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:01:38