System Statistiken sammeln
Die aktuellen System Statistiken
werden gespeichert in der folgenden Tabelle:
select * from sys.aux_stats$ where sname =
'SYSSTATS_MAIN';
Bevor man neue Statistiken
sammelt, sollte man die aktuellen Werte aus der sys.aux_stats$ Tabelle löschen.
Ansonsten versucht die Datenbank die aktuell in der Tabelle vorhandenen Werte
und die neuen gesammelten Werte zu mergen.
Löschen der aktuellen Werte:
exec
dbms_stats.delete_system_stats();
Dabei werden die aktuellen Werte
aus der sys.aux_stats$ Tabelle entfernt und in eine andere Tabelle gespeichert,
damit die Werte für einen eventuellen Restore in der Zukunft trotzdem noch
verfügbar sind.
Neue Werte können dann wie folgt
gesammelt werden:
exec dbms_stats.gather_system_stats(gathering_mode=>'INTERVAL',interval=>
120);
D.h., dass die Datenbank 120
Minuten lang die Statistiken ermittelt und am Ende die besten Werte übernimmt.
Um einen Überblick über die Historie
aller Sammlungen/Löschungen zu erhalten, kann man folgende Query benutzen:
select
target,operation,status,start_time,end_time from dba_optstat_operations where
operation= 'gather_system_stats' or operation = 'delete_system_stats' order by
start_time asc;
Wiederherstellen der
Statistiken
Um rauszufinden, wie „viel“
maximal man in der Vergangenheit zurückgehen kann, kann man folgende Query
ausführen:
select dbms_stats.get_stats_history_availability from
dual;
Die Query
wird das maximal in der Vergangenheit verfügbare Datum anzeigen, zu dem man die
System-Statistiken zurücksetzen kann.
Ein
Beispiel:
Die Query
liefert zurück:
10.10.15 06:37:49
D.h. bis
zu dem angegeben Zeitpunkt, kann ich zum Wiederherstellen irgendein Zeitpunkt
zwischen dem jetzigen, aktuellen Zeitpunkt und den maximalen Punkt in der
Vergangenheit wählen. Die Datenbank weis für jede Millisekunde von jetzt bis zu
dem maximalen Zeitpunkt in der Vergangenheit, welche System-Statistiken Werte
zu der Millisekunde aktiv waren!
Nun
kommen wir zum eigentlichen Restore. Zuerst sollte man wieder erstmal die
aktuellen Werte aus der sys.aux_stats$ Tabellelöschen:
exec
dbms_stats.delete_system_stats();
Nun kann
der Restore erfolgen:
exec
dbms_stats.restore_system_stats(to_date('09.11.2015 12:00:16','dd.mm.yyyy
hh24:mi:ss'));
Man kann als Parameter also genau den Zeitpunkt angeben, zu dem
man „springen möchte“. Wenn man z.B. also Statistiken gesammelt hat am
15.10.2015 16:00:00 und dann wieder neue Statistiken gesammelt hat am
20.10.2015 18:00:00 und nach dem ermitteln der Werte des zweiten Sammelns,
möchte man zurück zu den Werten, die man beim ersten Mal gesammelt hatte, dann
muss man für die restore_system_stats Funktion nicht unbedingt genau den
Zeitpunkt „15.10.2015 16:00:00“ angeben, sondern man kann irgendeinen Zeitpunkt
angeben, an dem die gewünschten Werte aktuell/aktiv waren, das heißt bis zum
20.10.2015 18:00:00. Das wäre z.b. 16.10.2015 17:55:02, oder 19.10.2015
02:20:23, oder gar 20.10.2015 17:59:59.