2010-09-18 171 views

回答

2
+0

我见过这个方法。但是,在MyModel.connection上调用它似乎没有任何作用。我正在做批量插入,并需要清除查询缓存,以便ActiveRecord可以看到新记录,但到目前为止我还没有成功。 – clacke 2011-10-20 18:11:46

+1

看来,在Rails 2中,您可以通过“ActiveRecord :: Base.query_cache.clear_query_cache”访问查询缓存,但现在该位置消失了。就像我说的那样,在模型的连接上做这件事情是行不通的。最后,我解决了这个问题,完全落后于AR的背后,也是在质量插入之后的查询。 – clacke 2011-10-20 19:39:29

+0

@ clacke你能发布你发现的最终解决方案吗(“完全落后于AR的背部”)?还是你间接地说你使用SQL而不是AR? – jvatic 2012-01-04 20:42:28

23

看看方法clear_query_cache对于第一近似:

ActiveRecord::Base.connection.query_cache.clear 
0

通常情况下,当你看到数据库的查询缓存,你的数据库做缓存,而不是ActiveRecord的,这意味着您需要清除数据库级别的缓存和缓冲区,而不是ActiveRecord级别。

例如,要清除Postgres的缓存和Mac上的缓冲区,您将执行sudo purge,这会强制刷新和清空磁盘缓存。

要清除Postgres的高速缓存和缓冲区在Linux上,你会停机的Postgres,删除缓存,并再次开始上升的Postgres的:

service postgresql stop 
sync 
echo 3 > /proc/sys/vm/drop_caches 
service postgresql start 

延伸阅读: