2010-01-27 161 views
28

Estoy ajustando las consultas SQL en una base de datos Oracle. Quiero asegurarme de que todos los elementos almacenados en caché se borren antes de ejecutar cada consulta para evitar resultados de rendimiento engañosos. Me aclaro la piscina compartida (para deshacerse de SQL caché/explicar los planes) y el tampón caché (para deshacerse de los datos almacenados en caché) ejecutando los siguientes comandos:Cómo borrar todos los elementos en caché en Oracle

alter system flush buffer_cache; 
alter system flush shared_pool; 

hay algo más que debería estar haciendo, o es esto suficiente?

Gracias!

Respuesta

3

También debe recopilar estadísticas - ya sea para sus esquemas de bases de datos o incluso todo:

begin 
    dbms_stats.gather_schema_stats('schema_name'); 
end; 

o

begin 
    dbms_stats.gather_database_stats; 
end; 

Y luego borre el grupo compartido.

4

Tenga en cuenta que el sistema operativo y el hardware también almacenan en caché, lo que puede sesgar los resultados.

+1

Sí, eso es definitivamente algo que me he preguntado cuando las consultas se ejecutan más rápido de lo normal, incluso después de borrar la memoria caché del búfer. ¡Gracias por el consejo! –

1

Yo afirmaría que presentaría un resultado engañoso porque ha borrado todas las memorias caché. La base de datos en el mundo real, solo está en ese estado una vez en su vida. De hecho, cuando se realizan pruebas de rendimiento, generalmente es una práctica aceptada ejecutar una consulta varias veces para que pueda ver el beneficio del almacenamiento en caché (y otras optimizaciones).

Cuestiones relacionadas