【发布时间】:2016-07-21 20:29:13
【问题描述】:
我怀疑我的应用程序存在内存泄漏,我了解到 rails 会自动管理最近 1000 次查询执行的缓存。几乎我的应用程序中的每个查询都是唯一的且非常繁重,并且包含许多返回的行。
那么有没有办法可以更改语句缓存的默认值?
(我正在使用 postgres 数据库)
【问题讨论】:
标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord
我怀疑我的应用程序存在内存泄漏,我了解到 rails 会自动管理最近 1000 次查询执行的缓存。几乎我的应用程序中的每个查询都是唯一的且非常繁重,并且包含许多返回的行。
那么有没有办法可以更改语句缓存的默认值?
(我正在使用 postgres 数据库)
【问题讨论】:
标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord
它在数据库适配器级别处理。在 Postgrsql 适配器中有一个选项可以通过 statement_limit 进行配置。
你需要添加到database.yml
production:
adapter: postgresql
statement_limit: 200
关注this 链接获取官方文档。有一个选项可以完全禁用语句缓存。
production:
adapter: postgresql
prepared_statements: false
其次,有一个选项可以清除 postgres 适配器中的 statement cache。有一个名为clear_cache! 的方法可以在Postgres adaptor 找到
Here 对同一问题进行了很好的讨论。您将在以下链接中找到所有详细信息
【讨论】:
Rails 有许多内置的缓存策略,但它们都不是基于 查询次数 本身。缓存(如果有限)基于文件大小和过期时间。
如果您的应用程序使用内存存储,则默认文件大小限制为32Mb。这可以通过在您的配置中添加以下行来更改:
config.cache_store = :memory_store, { size: 64.megabytes }
可以在here找到有关此的官方文档以及许多其他形式的缓存。
鉴于您对这种密集缓存的明显需求,我建议您还考虑各种其他选项 - 例如 fragment cacheing 和 Russian doll caching - 因为这可能比单独使用 SQL 缓存的资源密集型策略要少得多。
【讨论】: