【问题标题】:Change ActiveRecord statement cache default Rails更改 ActiveRecord 语句缓存默认 Rails
【发布时间】:2016-07-21 20:29:13
【问题描述】:

我怀疑我的应用程序存在内存泄漏,我了解到 rails 会自动管理最近 1000 次查询执行的缓存。几乎我的应用程序中的每个查询都是唯一的且非常繁重,并且包含许多返回的行。

那么有没有办法可以更改语句缓存的默认值?
(我正在使用 postgres 数据库)

【问题讨论】:

    标签: ruby-on-rails ruby postgresql ruby-on-rails-4 activerecord


    【解决方案1】:

    它在数据库适配器级别处理。在 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 对同一问题进行了很好的讨论。您将在以下链接中找到所有详细信息

    【讨论】:

      【解决方案2】:

      Rails 有许多内置的缓存策略,但它们都不是基于 查询次数 本身。缓存(如果有限)基于文件大小过期时间

      如果您的应用程序使用内存存储,则默认文件大小限制为32Mb。这可以通过在您的配置中添加以下行来更改:

      config.cache_store = :memory_store, { size: 64.megabytes }
      

      可以在here找到有关此的官方文档以及许多其他形式的缓存。

      鉴于您对这种密集缓存的明显需求,我建议您还考虑各种其他选项 - 例如 fragment cacheingRussian doll caching - 因为这可能比单独使用 SQL 缓存的资源密集型策略要少得多。

      【讨论】:

      • 我希望有人在对此答案投反对票时添加了评论。
      • @RN。大概是因为,正如公认的答案所指出的那样,有一种方法可以配置准备好的语句的数量(我认为仅适用于 Postgres 数据库)。但是,这仍然不是真正的“rails”配置,我认为我的其余答案是准确的 - 所以我支持上述建议。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-13
      • 1970-01-01
      • 2012-11-25
      • 2017-05-10
      • 1970-01-01
      相关资源
      最近更新 更多