2010-02-01 14 views
15

Estoy tratando de probar la utilidad de una nueva tabla de resumen para mis datos.Cómo deshabilitar la memoria caché de Oracle para las pruebas de rendimiento

Así que he creado dos procedimientos para recuperar los datos de un cierto intervalo, cada uno usando una fuente de tabla diferente. Entonces, en mi aplicación de consola C#, llamo a uno u otro. El problema comienza cuando quiero repetir esto varias veces para tener un buen patrón de tiempo de respuesta.

que tiene algo como esto: 1199,84,81,81,81,81,82,80,80,81,81,80,81,91,80,80,81,80

Probablemente mi Oracle 10g está haciendo un almacenamiento en caché inadecuado.

¿Cómo puedo resolver esto?

Respuesta

9

EDIT: Ver este thread on asktom, que describe cómo y por qué no hacer esto.

Si se encuentra en un entorno de prueba, usted puede poner su línea de tablas y de nuevo en línea:

ALTER TABLESPACE <tablespace_name> OFFLINE; 
ALTER TABLESPACE <tablespace_name> ONLINE; 

O puede probar

ALTER SYSTEM FLUSH BUFFER_CACHE; 

pero de nuevo sólo en el entorno de prueba.

Cuando prueba en su sistema "real", los tiempos que obtiene después de la primera llamada (los que usan datos en caché) pueden ser más interesantes, ya que tendrá datos en caché. Llame al procedimiento dos veces y solo tenga en cuenta los resultados de rendimiento que obtiene en las ejecuciones posteriores.

+0

enrojeciendo antes de la llamada Obtuve algunos resultados interesantes como: 1370,354,391,375,352,511,390,375,326,335,435,334,334,328,337,314,417,377,384,367,393. Voy a estudiar más sobre eso mañana y voy a decir mis resultados. Gracias! – Custodio

+2

Hola @Peter Lang, mis tablas están en tablespace del sistema, por lo que no puedo desconectarme. Sin embargo, no entiendo por qué debería hacer esto? ¿Puede explicar o sugerir una buena conferencia? Gracias. – Custodio

6

Probablemente mi Oracle 10g está realizando un almacenamiento en memoria caché inadecuado.

En realidad, parece que Oracle está haciendo un caché completamente apropiado. Si estas tablas se van a usar mucho, entonces esperaría tenerlas en caché la mayor parte del tiempo.

edición

En un comentario sobre la respuesta de Pedro Luis dijo

lavado antes de la llamada Tengo algunas resultados interesantes como: 1370.354.391.375.352.511.390.375.326.335.435.334.334.328.337.314.417.377.384.367.393.

Estos hallazgos son "interesantes" porque el enjuague significa que las llamadas tardan un poco más que cuando las filas están en la memoria caché pero no tan largas como la primera. Esto es casi seguro porque el servidor ha almacenado los registros físicos en su caché física. La única manera de evitar eso, ejecutar de verdad contra un caché vacío es reiniciar el servidor antes de cada prueba.

También puede aprender a ajustar las consultas correctamente. Comprender how the database works es un buen comienzo. Y EXPLAIN PLAN es una mejor ayuda de ajuste que el reloj de pared.Find out more.

+0

+1: Supongo que no estaba lo suficientemente claro sobre eso en mi publicación :) –

+0

Ok, entiendo la importancia de almacenar en caché esta situación, pero en mi caso las tablas no se repasarán con el mismo intervalo muchas veces. Solo quiero ver el tiempo de respuesta sin caché, usando mi tabla de resumen o no. Sin embargo, gracias lo aprecio. +1 – Custodio

+0

He leído su edición, esto es un problema. ¿Tiene alguna sugerencia de una mejor solución de comparación entre mi procedimiento que utiliza la tabla normal y el otro que usa la tabla resumen? – Custodio

Cuestiones relacionadas