我怀疑我的应用程序内存泄漏,我读到rails正在自动管理最近1000次查询执行的缓存。我的应用程序中几乎每个查询都是唯一的,而且非常重,并且包含许多返回的行。
那么,有没有一种方法可以更改语句缓存的默认值
(我使用的是postgres DB)
它是在数据库适配器级别处理的。Postgresql适配器中有一个statement_limit
配置选项。
您需要将其添加到database.yml
中
production:
adapter: postgresql
statement_limit: 200
点击此链接获取官方文档。有一个选项可以完全禁用语句缓存。
production:
adapter: postgresql
prepared_statements: false
其次,还有一个选项可以清除postgres适配器中的statement cache
。有一个名为clear_cache!
的方法,可以在Postgres适配器中找到
这里就同一件事进行了很好的讨论。您将在以下链接中找到所有详细信息
Rails有许多内置的缓存策略,但它们都不是基于查询数本身的。如果缓存有限,则基于file size和过期时间。
如果应用程序正在使用内存存储,则默认文件大小限制为32Mb
。这可以通过在配置中添加以下行来更改:
config.cache_store = :memory_store, { size: 64.megabytes }
关于这一点的官方文档,以及许多其他形式的缓存,可以在这里找到。
考虑到您明显需要这种密集型缓存,我建议您也考虑各种其他选项,如碎片缓存和Russian doll缓存,因为这可能是一种比单独使用SQL缓存资源密集度低得多的策略。