2010-01-27 3 views
28

Ich optimiere SQL-Abfragen in einer Oracle-Datenbank. Ich möchte sicherstellen, dass alle zwischengespeicherten Elemente vor dem Ausführen jeder Abfrage gelöscht werden, um irreführende Leistungsergebnisse zu vermeiden. Ich den gemeinsamen Pool räumen (um von zwischengespeicherten SQL befreien/erklären Pläne) und Puffer-Cache (auf der zwischengespeicherten Daten loszuwerden), indem Sie die folgenden Befehle ausführen:Wie alle zwischengespeicherten Elemente in Oracle gelöscht werden

alter system flush buffer_cache; 
alter system flush shared_pool; 

Gibt es mehr ich tun sollte, oder ist das ausreichend?

Danke!

Antwort

3

Sie sollten auch Statistiken sammeln - entweder für Ihr Schema oder sogar ganze Datenbank:

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

oder

begin 
    dbms_stats.gather_database_stats; 
end; 

Und dann den gemeinsamen Pool löschen.

4

Denken Sie daran, dass das Betriebssystem und die Hardware auch Caching durchführen, was Ihre Ergebnisse verfälschen kann.

+1

Ja, das ist definitiv etwas, worüber ich mich gewundert habe, wenn Abfragen schneller als gewöhnlich ausgeführt werden, selbst nachdem der Puffercache gelöscht wurde. Danke für den Tipp! –

1

Ich würde behaupten, dass Sie irreführendes Ergebnis präsentieren würden, weil Sie alle Caches gelöscht haben. Die Datenbank in der realen Welt ist nur einmal in diesem Zustand in diesem Zustand. Tatsächlich ist es bei Leistungstests in der Regel eine gängige Praxis, eine Abfrage mehrmals auszuführen, damit Sie den Vorteil des Caching (und anderer Optimierungen) sehen können.

Verwandte Themen