it-swarm-eu.dev

Wie oft sollten Oracle-Datenbankstatistiken ausgeführt werden?

Wie oft sollten Oracle-Datenbankstatistiken Ihrer Erfahrung nach ausgeführt werden? Unser Entwicklerteam stellte kürzlich fest, dass unsere Produktionsbox in mehr als zweieinhalb Monaten über keine Statistiken verfügt. Das hört sich nach langer Zeit für mich an, aber ich bin kein DBA.

21
user290

Bei meinem letzten Job haben wir einmal wöchentlich Statistiken erstellt. Wenn ich mich recht erinnere, haben wir sie an einem Donnerstagabend eingeplant, und am Freitag achteten die Datenbankadministratoren sehr darauf, die längsten laufenden Abfragen auf unerwartete Ereignisse zu überwachen. (Der Freitag wurde ausgewählt, weil es oft kurz nach einer Code-Veröffentlichung war und in der Regel ein eher verhaltener Tag war.) Wenn sie eine schlechte Abfrage sahen, fanden sie einen besseren Abfrageplan und retteten diesen, so dass er sich nicht unerwartet ändern konnte . (Oracle verfügt über Tools, die dies automatisch für Sie erledigen, sagen Sie der Abfrage, dass die Abfrage optimiert werden soll, und tut dies.)

Viele Organisationen vermeiden es, Statistiken zu erstellen, aus Angst, dass unerwartete Abfragepläne auftauchen. Dies bedeutet jedoch in der Regel, dass ihre Abfragepläne mit der Zeit immer schlechter werden. Und wenn sie Statistiken ausführen, stoßen sie auf eine Reihe von Problemen. Das daraus resultierende Problem, um diese Probleme zu beheben, bestätigt ihre Befürchtungen hinsichtlich der Gefahr, dass Statistiken ausgeführt werden. Aber wenn sie regelmäßig Statistiken abliefen, die Überwachungstools wie gewünscht einsetzen und Probleme beheben würden, hätten sie weniger Kopfschmerzen und würden sie nicht alle gleichzeitig treffen.

13
user11318

Immer wenn sich die Daten "signifikant" ändern.

Wenn eine Tabelle von einer Zeile auf 200 Zeilen wechselt, ist dies eine wesentliche Änderung. Wenn eine Tabelle von 100.000 auf 150.000 Zeilen wechselt, ist dies keine große Veränderung. Wenn eine Tabelle von 1000 Zeilen mit identischen Werten in der häufig abgefragten Spalte X bis zu 1000 Zeilen mit nahezu eindeutigen Werten in Spalte X reicht, ist dies eine bedeutende Änderung.

Statistiken speichern Informationen über die Anzahl der Elemente und die relativen Häufigkeiten. Diese Werte lassen es zu "erraten", wie viele Zeilen einem bestimmten Kriterium entsprechen. Wenn dies falsch ist, kann das Optimierungsprogramm einen sehr suboptimalen Abfrageplan auswählen.

13
Jonathan Rupp

Seit Oracle 11g werden Statistiken standardmäßig automatisch erfasst.

Bei der Installation von Oracle Database sind zwei Scheduler-Fenster vordefiniert:

  • WEEKNIGHT_WINDOW beginnt um 22 Uhr. und endet um 6 Uhr morgens jeden Montag bis Freitag. 
  • WEEKEND_WINDOW umfasst ganze Tage Samstag und Sonntag.

Wann wurden zuletzt Statistiken gesammelt?

SELECT owner, table_name, last_analyzed FROM all_tables ORDER BY last_analyzed DESC NULLS LAST; --Tables.
SELECT owner, index_name, last_analyzed FROM all_indexes ORDER BY last_analyzed DESC NULLS LAST; -- Indexes.

Status der automatisierten Statistikerfassung?

SELECT * FROM dba_autotask_client WHERE client_name = 'auto optimizer stats collection';

Windows-Gruppen?

SELECT window_group_name, window_name FROM dba_scheduler_wingroup_members;

Zeitpläne für Fenster?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

Manuelles Sammeln von Datenbankstatistiken in diesem Schema: 

EXEC dbms_stats.gather_schema_stats(ownname=>NULL, cascade=>TRUE); -- cascade=>TRUE means include Table Indexes too.

Manuelles Sammeln von Datenbankstatistiken in allen Schemas!

-- Probably need to CONNECT / AS SYSDBA
EXEC dbms_stats.gather_database_stats;
13
grokster

Welche Oracle-Version verwenden Sie? Überprüfen Sie diese Seite, die sich auf Oracle 10 bezieht:

http://www.acs.ilstu.edu/docs/Oracle/server.101/b10752/stats.htm

Es sagt:

Der empfohlene Ansatz zum Erfassen von Statistiken besteht darin, dass Oracle die Statistiken automatisch erfasst. Oracle erfasst automatisch Statistiken zu allen Datenbankobjekten und verwaltet diese Statistiken in einem regelmäßig geplanten Wartungsjob.

5
David Medinets

Mit der 10g-Version und höher von Oracle benötigt der Optimierer aktuelle Statistiken zu Tabellen und Indizes, um eine "gute" Entscheidung für den Ausführungsplan zu treffen. Wie oft Sie Statistiken sammeln, ist ein schwieriger Anruf. Dies hängt von Ihrer Anwendung, Ihrem Schema, der Datenrate und der Geschäftspraxis ab. Einige Apps von Drittanbietern, die mit der älteren Version von Oracle abwärtskompatibel sind, bieten mit dem neuen Optimierer keine gute Leistung. Diese Anwendung erfordert, dass Tabellen keine Statistiken haben, sodass die Datenbank wieder auf den Ausführungsplan der Regelbasis zurückgreifen kann. Im Durchschnitt empfiehlt Oracle jedoch, Statistiken für Tabellen mit veralteten Statistiken zu sammeln. Sie können die zu überwachenden Tabellen festlegen, ihren Status überprüfen und analysieren lassen, ob und wann sie veraltet sind. Das ist oft genug, manchmal nicht. Es hängt wirklich von Ihrer Datenbank ab. Für meine Datenbank haben wir eine Reihe von OLTP -Tabellen, die eine nächtliche Statistiksammlung benötigen, um die Leistung zu erhalten. Andere Tabellen werden einmal wöchentlich analysiert. In unserer großen Datenbankdatenbank werden die Daten nach Bedarf analysiert, da die Tabellen für eine regelmäßige Analyse zu groß sind, ohne dass sich dies auf die allgemeine Datenbanklast und die Leistung auswirkt. Die richtige Antwort lautet also: Sie hängt von der Anwendung, den Datenänderungen und den Geschäftsanforderungen ab.

2
MichaelN

Als ich ein großes, von Oracle unterstütztes Mehrbenutzer-Planungssystem verwaltete, hatte unser DBA einen wöchentlichen Job, der Statistiken sammelte. Wenn wir eine bedeutende Änderung herausbrachten, die sich auf Statistiken auswirken oder von dieser beeinflusst werden könnte, würden wir den Job zwingen, den Zyklus zu verlassen, um die Dinge aufzuholen.

2
Joe Skora

Stellen Sie sicher, dass das Risiko, dass neue Statistiken unerwünschte Änderungen an Abfrageplänen verursachen, gegen das Risiko abgewogen wird, dass veraltete Statistiken selbst dazu führen können, dass sich Abfragepläne ändern. 

Stellen Sie sich vor, Sie haben eine Fehlerdatenbank mit einer Tabelle ISSUE und einer Spalte CREATE_DATE, bei der die Werte in der Spalte mehr oder weniger monoton ansteigen. Nehmen Sie nun an, dass sich in dieser Spalte ein Histogramm befindet, das Oracle mitteilt, dass die Werte für diese Spalte zwischen dem 1. Januar 2008 und dem 17. September 2008 gleichmäßig verteilt sind. Dadurch kann das Optimierungsprogramm die Anzahl der Zeilen, die dies tun würden, vernünftig schätzen zurückgegeben werden, wenn Sie nach allen Ausgaben gesucht haben, die in der letzten Woche erstellt wurden (dh vom 7. bis 13. September). Wenn die Anwendung weiterhin verwendet wird und die Statistiken niemals aktualisiert werden, wird dieses Histogramm immer weniger genau. Das Optimierungsprogramm erwartet daher, dass Abfragen für "in der letzten Woche erstellte Probleme" im Laufe der Zeit immer weniger genau werden und Oracle möglicherweise dazu veranlasst, den Abfrageplan negativ zu ändern. 

1
Justin Cave

Im Allgemeinen ist es nicht ratsam, Statistiken zu sammeln, die in der gesamten Datenbank so häufig sind, es sei denn, Sie haben eine starke Begründung dafür, wie z. B. Masseneinfügungen oder Änderungen großer Datenmengen in der Datenbank. Die Statistikdaten in dieser Datenbank können in dieser Häufigkeit geändert werden Wenn Sie den Abfrageausführungsplan auf einen neuen fehlerhaften Ausführungsplan setzen, kann es für Sie mit dem Versuch, jede von den neuen Armenplänen betroffene Abfrage zu optimieren, viel Zeit kosten. Aus diesem Grund sollten Sie die Auswirkungen der Erfassung neuer Statistiken in einer Testdatenbank oder in diesem Fall testen Sie haben nicht die Zeit oder die Manpower dafür, zumindest sollten Sie einen Fallback-Plan einhalten, indem Sie die ursprüngliche Statik sichern, bevor Sie neue Stati sammeln. Falls Sie also neue Statistiken sammeln, werden die Abfragen nicht ausgeführt Wie erwartet, können Sie die ursprünglichen Statistiken problemlos wiederherstellen.

Es gibt ein sehr nützliches Skript, das Ihnen beim Sichern der Originalstatistiken und beim Sammeln neuer Statistiken helfen kann und Ihnen einen SQL-Befehl zur Verfügung stellt, mit dem Sie die Originalstatik wiederherstellen können, falls die Sache nach dem Sammeln neuer Statistiken nicht wie erwartet funktioniert. Sie finden das Skript unter diesem Link: http://dba-tips.blogspot.com/2014/09/script-to-ease-gathering-statistics-on.html

0
Chion

Bei einem Data-Warehouse-Typ-System können Sie erwägen, überhaupt keine Statistiken zu sammeln, und sich auf dynamische Stichprobenauswahl verlassen (Einstellung von optimizer_dynamic_sampling auf Stufe 2 oder höher).

0
David Aldridge