2010-01-27 13 views
28

Sintonizzo query SQL su un database Oracle. Voglio assicurarmi che tutti gli elementi memorizzati nella cache vengano cancellati prima di eseguire ogni query al fine di prevenire risultati di prestazioni fuorvianti. A cancellare la piscina in comune (per sbarazzarsi di SQL cache/spiegare piani) e buffer della cache (per sbarazzarsi dei dati memorizzati nella cache) eseguendo i seguenti comandi:Come cancellare tutti gli elementi memorizzati nella cache in Oracle

alter system flush buffer_cache; 
alter system flush shared_pool; 

c'è di più dovrei fare, o è sufficiente?

Grazie!

risposta

3

Si dovrebbe anche raccogliere statistiche - sia per i vostri schemi o addirittura tutto il database:

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

o

begin 
    dbms_stats.gather_database_stats; 
end; 

E quindi cancellare il pool condiviso.

4

Ricordare che il sistema operativo e l'hardware fanno anche il caching che può distorcere i risultati.

+1

Sì, questo è sicuramente qualcosa su cui mi sono interrogato quando le query vengono eseguite più velocemente del solito, anche dopo aver eliminato la cache del buffer. Grazie per il consiglio! –

1

Direi che presenteresti un risultato fuorviante perché hai cancellato tutte le cache. Il database nel mondo reale, è sempre e solo in quello stato una volta nella sua vita. In effetti, quando si esegue il test delle prestazioni, è generalmente prassi consolidata eseguire una query più volte in modo da poter vedere il vantaggio della memorizzazione nella cache (e altre ottimizzazioni).

Problemi correlati