2010-09-18 10 views

Respuesta

2
+0

He visto el método. Sin embargo, llamarlo a MyModel.connection no parece tener ningún efecto. Estoy haciendo inserciones masivas y necesito borrar el caché de consultas para que ActiveRecord pueda ver los nuevos registros, pero hasta ahora no he tenido éxito. – clacke

+1

Parece que en Rails 2 puede llegar al caché de consultas a través de 'ActiveRecord :: Base.query_cache.clear_query_cache', pero ahora ese lugar ya no está. Como dije, hacerlo sobre la conexión del modelo no funciona. Finalmente lo resolví yendo por completo detrás de la espalda de AR también para las consultas que siguen a esa inserción masiva. – clacke

+0

@clacke puede publicar la solución final que encontró ("completamente detrás de la espalda de AR")? ¿O indirectamente está diciendo que usa SQL en lugar de AR? – jvatic

23

En una primera aproximación:

ActiveRecord::Base.connection.query_cache.clear 
0

A menudo cuando vea el almacenamiento en caché de consultas de bases de datos, su base de datos está haciendo el almacenamiento en caché, no ActiveRecord, lo que significa necesita borrar el caché y los búferes en el nivel de db, no en el nivel de ActiveRecord.

Por ejemplo, para borrar la memoria caché y los búferes de Postgres en Mac, haría sudo purge, lo que obliga a que la memoria caché del disco se vacíe y vacíe.

Para borrar la memoria caché y tampones Postgres' en Linux, que cerraría postgres, deje caer los cachés, y empezar a postgres respaldo otra vez:

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

Más información:

Cuestiones relacionadas