启用Rails QueryCache,但不起作用

时间:2019-07-08 00:13:23

标签: ruby-on-rails ruby-on-rails-4 caching query-cache dalli

我们有一个在Oracle后端上运行的Rails 4.2应用程序,其中memcached / Dalli作为缓存存储。

QueryCache似乎不适用于同一请求中的重复SQL。根据文档:

  

查询缓存是一种Rails功能,可缓存返回的结果集   通过每个查询。如果Rails再次遇到相同的查询   请求,它将使用缓存的结果集,而不是运行   再次查询数据库。

application / production.rb中的配置将缓存存储设置为Dalli,并在生产中将query_cache切换为true:

application.rb: config.cache_store  = :dalli_store, 'localhost:11211', { namespace: 'BASE', down_retry_delay: 120 }

environments/production.rb:  config.action_controller.perform_caching = true

以详细模式运行memcached,我可以看到我们显式的低级缓存(即Rails.cache.set)中的所有访存,设置和未命中,但是没有任何查询缓存的迹象。 (尽管我不确定100%查询缓存是否应达到memcached或是否仅在请求期间保留在内存中)。鉴于我可以看到memcached中的其他缓存活动,因此我相当确定memcached和rails之间的连接/设置是可以的。

我认为它没有被缓存有两个原因:

  1. 否在生产日志中选择(在调试模式下)显示CACHE 前缀-只是相同的SELECT,而XX.XXms时间戳略有不同;还有
  2. 启用 使用Oracle进行数据库审计显示每个数据库有数十个相同的SELECTS 请求(即具有相同大小写和相同绑定参数的相同SELECT查询条件)

我看到的一个建议是查看中间件以确认是否存在QueryCache,这似乎是:

dave@test:~/code/app1$ rake middleware
use #<ActiveSupport::Cache::Strategy::LocalCache::Middleware>
use ActiveRecord::QueryCache

另一建议是明确检查(并设置)ActiveRecord::Base.connection.query_cache_enabled。 我把它放在了我当前正在尝试优化的方法的before_filter中,它报告自己已被启用,但是仍然没有缓存:

  def enable_qcache
     ActiveRecord::Base.connection.enable_query_cache!
     logger.error "IS CACHE ENABLED:  #{ ActiveRecord::Base.connection.query_cache_enabled}"
  end

   production.log: IS CACHE ENABLED:  true

以下是同一请求中来自日志的相同选择的示例:

  Policy Load (12.2ms)  SELECT * FROM (SELECT  "POLICY".* FROM "POLICY" WHERE "POLICY"."POLICY_ID" = :a1  ORDER BY policy_original_number DESC, policy_id DESC ) WHERE ROWNUM <= 1  [["policy_id", 459723071]]
  Policy Load (11.5ms)  SELECT * FROM (SELECT  "POLICY".* FROM "POLICY" WHERE "POLICY"."POLICY_ID" = :a1  ORDER BY policy_original_number DESC, policy_id DESC ) WHERE ROWNUM <= 1  [["policy_id", 459723071]]
  Policy Load (9.0ms)   SELECT * FROM (SELECT  "POLICY".* FROM "POLICY" WHERE "POLICY"."POLICY_ID" = :a1  ORDER BY policy_original_number DESC, policy_id DESC ) WHERE ROWNUM <= 1  [["policy_id", 459723071]]

0 个答案:

没有答案