ActiveRecord #cute vs PG#send_query用于大型结果集的内存使用情况

时间:2015-07-14 13:16:07

标签: ruby-on-rails ruby postgresql activerecord memory-management

背景

我注意到,当我们点击ActiveRecord的#execute()获取大型结果集(> 1M行数据)时,我们的工作箱会占用内存利用率,但是当我使用PG连接到PG时,内存保持相对平坦原始连接并使用#send_query方法。此外,即使在#execute运行完毕之后,内存也保持在相同的高级别,这使得看起来任何创建的临时对象都在附近,并且没有收集垃圾。

在任何一种情况下,我都没有将#execute或#send_query方法的结果设置为任何变量;它只是被调用来执行传入的SQL。

问题

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

0 个答案:

没有答案