2010-09-18 10 views

Antwort

2

Werfen Sie einen Blick auf die Methode clear_query_cache in http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/QueryCache.html

+0

Ich habe die Methode gesehen. Das Aufrufen von MyModel.connection scheint jedoch keine Auswirkung zu haben. Ich mache Masseneinfügungen und muss den Abfragecache löschen, damit ActiveRecord die neuen Datensätze sehen kann, aber bisher war ich nicht erfolgreich. – clacke

+1

Es scheint, dass Sie in Rails 2 den Abfrage-Cache über 'ActiveRecord :: Base.query_cache.clear_query_cache' erreichen konnten, aber jetzt ist dieser Platz weg. Wie ich schon sagte, funktioniert es nicht auf der Verbindung des Modells. Endlich habe ich es gelöst, indem ich hinter die AR-Rückseite auch für die Abfragen, die dieser Masseneinfügung folgen, ganz zurück gegangen bin. – clacke

+0

@clacke können Sie die endgültige Lösung posten, die Sie gefunden haben ("vollständig hinter ARs zurück")? Oder sagen Sie indirekt, dass Sie SQL anstelle von AR verwenden? – jvatic

23

In erster Näherung:

ActiveRecord::Base.connection.query_cache.clear 
0

Oft, wenn Sie das Caching von Datenbankabfragen zu sehen, ist Ihr db das Caching zu tun, nicht Active, was bedeutet, Sie müssen den Cache und die Puffer auf der db-Ebene löschen, nicht auf der ActiveRecord-Ebene.

Um beispielsweise den Cache und die Puffer von Postgres auf dem Mac zu löschen, würden Sie sudo purge ausführen, wodurch der Plattencache zwangsweise geleert und geleert wird.

Um Postgres' Cache und Puffer auf Linux zu löschen, würden Sie nach unten Postgres geschlossen, die Caches löschen und Postgres wieder starten zurück:

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

Weiterführende Literatur: