Frage

In Ihrer Erfahrung nach, wie oft Oracle Datenbank-Statistiken ausgeführt werden? Unser Team von Entwickler kürzlich entdeckt, dass Statistiken waren nicht unsere Produktion Box in mehr als 2 1/2 Monaten geführt. Das klingt wie eine lange Zeit für mich, aber ich bin kein DBA.

War es hilfreich?

Lösung

Bei meinem letzten Job liefen wir Statistiken einmal pro Woche. Wenn ich mich richtig erinnere, wir geplant, sie an einem Donnerstag Abend und am Freitag waren die DBAs sehr vorsichtig unerwartet die am längsten laufenden Anfragen für etwas zu überwachen. (Freitag wurde ausgewählt, weil es oft nur nach einer Veröffentlichung des Quellcodes war, und neigte dazu, ein ziemlich geringer Verkehr Tag.) Wenn sie eine schlechte Abfrage sahen würden sie einen besseren Abfrageplan finden und dass man sparen, damit es nicht wieder unerwartet ändern würde . (Oracle hat Werkzeuge, um dies automatisch für Sie tun, sagen Sie es um die Abfrage zu optimieren und es funktioniert.)

Viele Unternehmen vermeiden Statistiken aus Angst vor schlechten Abfragepläne laufen unerwartet auftauchen. Aber dies in der Regel bedeutet, dass ihre Abfragepläne immer schlimmer im Laufe der Zeit. Und wenn sie Statistiken laufen sie dann stoßen sie auf eine Reihe von Problemen. Die daraus resultierende Gerangel diese Probleme zu beheben, bestätigt ihre Ängste über die Gefahren der laufenden Statistiken. Aber wenn sie regelmäßig Statistiken lief, verwendet, um die Monitoring-Tools wie sie sollen, und behobenen Probleme, wie sie kamen, dann würden sie weniger Kopfschmerzen haben, und sie würden sie nicht alle auf einmal begegnen.

Andere Tipps

Da Oracle 11g Statistiken werden standardmäßig automatisch gesammelt.

Zwei Scheduler Fenster bei der Installation von Oracle Database vordefiniert sind:

  • WEEKNIGHT_WINDOW beginnt um 22.00 Uhr und endet um 06.00 Uhr jeden Montag bis Freitag.
  • WEEKEND_WINDOW umfasst ganze Tage Samstag und Sonntag.

Wenn Statistiken wurden zuletzt 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.

Der Status der automatisierten Sammeln von Statistiken?

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;

Fenster Termine?

SELECT window_name, start_time, duration FROM dba_autotask_schedule;

Manuelle Datenbankstatistiken in diesem Schema sammeln:

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

Manuelle Datenbankstatistiken in allen Schemen sammeln!

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

Jedes Mal, wenn sich die Daten ändern "signifikant".

Wenn eine Tabelle von 1 Zeile 200 Zeilen geht, ist, dass eine signifikante Veränderung. Wenn eine Tabelle von 100.000 Zeilen zu 150.000 Zeilen geht, ist das nicht eine schrecklich signifikante Veränderung. Wenn eine Tabelle von 1000 Zeilen all mit identischen Werten geht in der gemeinsam abgefragt Spalte X auf 1000 Zeilen mit nahezu eindeutigen Werten in Spalte X, das ist eine wesentliche Änderung.

Statistik speichert Informationen über Artikel zählen und relative Häufigkeiten - Dinge, die es „erraten“ lassen, wie viele Zeilen ein gegebenen Kriterien entsprechen. Wenn es falsch errät, kann der Optimierer einen wählen sehr suboptimalen Abfrage-Plan.

Was Oracle-Version verwenden Sie? Besuchen Sie diese Seite, die auf Oracle, die 10:

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

Dort heißt es:

  

Der empfohlene Ansatz zur Erfassung von Statistiken ist Oracle zu ermöglichen, automatisch die Statistiken zu sammeln. Oracle sammelt Statistiken über alle Datenbank-Objekte automatisch und diese Statistiken in einem regelmäßig geplanten Instandhaltungsauftrag hält.

Als ich ein großes Multi-User-Planungssystem unterstützt von Oracle, unsere DBA hatte eine wöchentliche Aufgabe der Verwaltung, die Statistiken gesammelt. Auch wenn wir eine wesentliche Änderung eingeführt, die durch Statistiken betroffen beeinflusst oder werden könnte, würden wir den Job zwingen, aus Zyklus zu laufen, um Dinge zu verfangen.

Mit 10g und höherer Version von Oracle, aktuellen Statistiken über Tabellen und Indizes vom Optimierer benötigt werden „gute“ Ausführungsplan Entscheidung zu treffen. Wie oft Sie Statistiken sammeln ist ein heikeler Anruf. Es hängt von Ihrer Anwendung, Schema, Datenrate und Geschäftspraxis. Einige Anwendungen von Drittanbietern, die geschrieben sind rückwärts mit älterer Version von Oracle kompatibel sein nicht einem guten Leistung mit dem neuen Optimierer. Diejenigen Anwendung erfordern, dass Tabellen keine Statistiken haben, so dass die db Resorts Basisausführungsplan entscheiden zurück. Aber im Durchschnitt Orakel empfiehlt, dass Statistiken über Tabellen mit veralteten Statistiken gesammelt werden. Sie können Tabellen-Monitor zu sein und ihren Zustand zu überprüfen und sie, wenn / analysieren, wenn abgestanden. Oft ist das genug, irgendwann ist es nicht. Es hängt wirklich von Ihrer Datenbank. Für meine Datenbank haben wir eine Reihe von OLTP-Tabellen, die jede Nacht Statistiken Sammlung benötigen Leistung zu erhalten. Andere Tabellen analysieren einmal pro Woche. Auf unserer großen dw Datenbank analysieren wir je nach Bedarf als die Tische für die regelmäßige Analyse zu groß sind, ohne die Gesamt db Belastung und Leistung zu beeinträchtigen. So ist die richtige Antwort ist, hängt es von der Anwendung, Datenänderung und geschäftlichen Anforderungen.

Achten Sie darauf, das Risiko, dass neue statistische Daten verursachen unerwünschte Änderungen balancieren abfragen Pläne gegen das Risiko, dass veraltete Statistiken können sich Ursache Abfrage ändern will.

Stellen Sie eine Bug-Datenbank mit einer Tabelle ISSUE haben und eine Spalte CREATE_DATE, wo die Werte in der Spalte monoton mehr oder weniger erhöhen. Nehmen wir nun an, dass es ein Histogramm auf dieser Spalte, die Oracle sagt, dass die Werte für diese Spalte zwischen dem 1. Januar gleichmäßig verteilt 2008 und 17. September 2008. Dies macht es möglich, dass das Optimierungsprogramm angemessen zu schätzen die Zahl der Zeilen, die würde zurückgegeben werden, wenn Sie für alle Themen erstellt letzte Woche waren auf der Suche (dh 07 bis 13 September). Wenn die Anwendung weiterhin verwendet werden und die Statistiken sind nie aktualisiert, jedoch wird dieses Histogramm immer weniger genau sein. So wird das Optimierungsprogramm Abfragen für „Missionen letzte Woche erstellt“ erwartet weniger und weniger genau im Laufe der Zeit zu sein und kann schließlich Oracle verursacht sie negativ auf den Abfrage-Plan zu ändern.

Im Fall eines Data Warehouse-Typ-Systems Sie überhaupt betrachten können keine Statistiken zu sammeln, und die sich auf dynamisches Sampling (Einstellung optimizer_dynamic_sampling auf Stufe 2 oder höher).

Generell ist es nicht empfehlenswert, Statistiken so häufig auf die gesamte Datenbank zu sammeln, wenn Sie einen guten Grund dafür, dass, wie eine Masseneinfügung oder große Datenmengen ändern sich häufig auf die Datenbank geschehen haben. Statistiken über die Datenbank in dieser Frequenz sammeln kann die Abfragen Ausführungsplan zu einer neuen schlechten Ausführungspläne ändern, kann das, was Sie viel Zeit durch die neuen Armen Pläne jede Abfrage betroffen abzustimmen versuchen kosten, diesem Grund sollten Sie die Auswirkungen der Versammlung testen sollten neue Statistiken über eine Testdatenbank, oder falls Sie nicht über die Zeit oder die menschliche Arbeitskraft für das, zumindest sollten Sie die Original-Statik durch das Sichern einen Ausweichplan halten, bevor Sie neue sammeln, so falls Sie ein sammeln Statistiken neu und dann haben die Abfragen nicht wie erwartet, können Sie leicht die ursprünglichen Statistiken wiederherstellen zurück.

Es ist ein sehr nützliches Skript können Ihnen Backup-Original Statistiken helfen und neues zu sammeln und Sie mit SQL-Befehl zur Verfügung stellen Sie die ursprüngliche Statik für den Fall verwenden können die Sache zur Wiederherstellung zurück, nicht erwartet ging nach neuen Statistiken zu sammeln. Sie können das Skript in diesem Link: http: //dba-tips.blogspot .com / 2014/09 / script-to-ease-gathering-Statistik-on.html

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top