2010-09-18 9 views

Répondre

2
+0

J'ai vu la méthode. Cependant, l'appeler sur MyModel.connection ne semble pas avoir d'effet. Je fais des insertions de masse et j'ai besoin d'effacer le cache de requête pour qu'ActiveRecord puisse voir les nouveaux enregistrements, mais jusqu'ici je n'ai pas réussi. – clacke

+1

Il semble que dans Rails 2, vous puissiez atteindre le cache de requêtes via 'ActiveRecord :: Base.query_cache.clear_query_cache', mais maintenant cet endroit est parti. Comme je l'ai dit, le faire sur la connexion du modèle ne fonctionne pas. Finalement, je l'ai résolu en allant complètement derrière le dos d'AR également pour les requêtes suivant cet insert de masse. – clacke

+0

@clacke pouvez-vous poster la solution finale que vous avez trouvée ("complètement derrière AR")? Ou dites-vous indirectement que vous utilisez SQL au lieu de AR? – jvatic

23

Pour une première approximation:

ActiveRecord::Base.connection.query_cache.clear 
0

Très souvent quand vous voyez la mise en cache des requêtes de base de données, votre base de données est en train de faire la mise en cache, et non ActiveRecord, ce qui signifie vous devez effacer le cache et les tampons au niveau db, pas le niveau ActiveRecord. Par exemple, pour effacer le cache et les tampons Postgres sur Mac, vous devez exécuter sudo purge, ce qui force le vidage et le vidage du cache disque.

Pour effacer le cache de Postgres et des tampons sous Linux, vous arrêtez postgres, déposez les caches, et commencer à postgres remonter à nouveau:

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

Pour en savoir plus:

Questions connexes