Ruby on rails ActiveRecord#执行vs PG#发送#查询大型结果集的内存使用情况 背景

Ruby on rails ActiveRecord#执行vs PG#发送#查询大型结果集的内存使用情况 背景,ruby-on-rails,ruby,postgresql,activerecord,memory-management,Ruby On Rails,Ruby,Postgresql,Activerecord,Memory Management,我注意到每当我们点击ActiveRecord的#execute()以获得一个大的结果集(>1M行数据)时,我们的工作框内存利用率就会急剧上升,但是当我使用原始连接连接到PG并改用#send#u查询方法时,内存会保持相对平坦。此外,即使在#execute已经完成运行之后,内存仍保持在相同的高级别,这使得创建的任何临时对象看起来都是固定的,不会被垃圾收集 在这两种情况下,我都没有将#execute或#send_查询方法的结果设置为任何变量;它只是被调用以执行传入的SQL 问题 #execute是否临

我注意到每当我们点击ActiveRecord的#execute()以获得一个大的结果集(>1M行数据)时,我们的工作框内存利用率就会急剧上升,但是当我使用原始连接连接到PG并改用#send#u查询方法时,内存会保持相对平坦。此外,即使在#execute已经完成运行之后,内存仍保持在相同的高级别,这使得创建的任何临时对象看起来都是固定的,不会被垃圾收集

在这两种情况下,我都没有将#execute或#send_查询方法的结果设置为任何变量;它只是被调用以执行传入的SQL

问题
  • #execute是否临时将结果集存储在PG::result对象中,而send_query只是将数据流化而不临时存储
  • 为什么在使用#execute方法执行SQL之后,内存利用率没有恢复到正常水平?我是否负责手动转储在内存中创建的任何对象?GC不应该处理这个吗
  • 我对ObjectSpace进行了一些挖掘,但无法确定内存膨胀的位置。任何帮助都将不胜感激