SQL キャッシュ

クエリキャッシュとはクエリによって返されるリザルトをキャッシュする機能。リクエストによって以前と同じクエリが発生した場合に、データベースへのクエリを実行する代わりにキャッシュされたリザルトを利用する。

データベースに対して同じクエリが2回実行されると、2回目はデータベースへのアクセスがスキップされる。1回目のクエリでクエリのリザルトをメモリ上のクエリキャッシュに保存し、2回目のクエリではメモリからリザルトを読み出す。

クエリキャッシュはアクション開始時に作成され、アクションの終了時に破棄される。キャッシュはアクションの実行中にのみ保持される。キャッシュを持続させたい場合は低レベルキャッシュを使う必要がある。

参考:

SQL キャッシュ | Rails ガイド [公式]

意識しないとまずい? ActiveRecord SQL キャッシュの罠 | DoRuby

Rails のクエリキャッシュの仕組みを調べた | takatoshiono’s blog

Active Record のキャッシュについて | YOSHINO 日記

SQL キャッシュを一時的に無効にする

User.uncached do 
  User.where(active: true).count
end

参考:

ActiveRecord のキャッシュをオフにする | happy lie, happy life

ActiveRecord のクエリキャッシュを使わずクエリを発行する – Rails でアレってどうやるんだっけ? – Qiita

Disable SQL Cache temporary in Rails? – Stack Overflow

Avoiding Caching with Rails ActiveRecord | Adam N England

クエリを再実行する (reload)

参考:

Rails で ActiveRecord がキャッシュされてしまう | teratail

cache_key

参考:

cache_key による結果セットとコレクションのキャッシュ機能 翻訳 | TechRacho

関連モデルのキャッシュ

参考:

ActiveRecord::Base.uncached() – still cached… association cached · Issue #2878 · rails/rails – GitHub

How to clear ActiveRecord query cache on associations with dynamic table – Ruby Forum

Redis を使ってクエリをキャッシュする

参考:

Rails でクエリ結果をキャッシュして DB 負荷を軽減する – Qiita

How to cache sql queries, the result of which never change? – Stack Overflow

キャッシュとメモ化

参考:

Memoization, Caching and SQL query optimization in Ruby on Rails | EquiValent

Memoization & caching in Ruby & Ruby on Rails – Stack Overflow

clear_all_connections!

参考:

How can I force the rails SQL cache to clear? – Stack Overflow

select_all

参考:

select_all – rails/query_cache.rb at v6.0.0.rc1 · rails/rails – GitHub

タグ:

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です