Sammeln Sie Statistiken für die partitions-Tabelle
Habe ich Tabelle ABC Intervall-partition von jedem Tag. Jede partition wird in Abfragen verwendet für diesen bestimmten Tag. Auch wenn ich schedule job @nyt jeden Tag zu sammeln stats-dann-Abfragen, die Verwendung, die Tabelle, bevor Sie Statistiken zu sammeln, wird nicht verwenden Sie einen optimalen plan.
Fügen Sie den plan von Abfrage-und ddl
Ich möchte wissen, wenn eine neue partition Hinzugefügt wird, und es ist Massenladen von Daten, haben wir Statistiken automatisch erfasst oder nicht. Wenn nicht, dann wie können wir sammeln Statistiken s
Haben Sie einen Blick auf package DBMS_STATS.GATHER_TABLE_STATISTICS, dort können Sie auch eine partition angeben.
Ich möchte wissen, wenn eine neue partition Hinzugefügt wird, und es ist Massenladen von Daten, haben wir Statistiken automatisch erfasst oder nicht. Wenn nicht, dann wie können wir sammeln Statistiken s
Haben Sie einen Blick auf package DBMS_STATS.GATHER_TABLE_STATISTICS, dort können Sie auch eine partition angeben.
InformationsquelleAutor Prats | 2017-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
In meiner Anwendung, die ich ausführen dieser Prozedur einmal am Tag per scheduler-job. Es speichert die Statistiken für die letzten partition.
In meiner Anwendung, die ich brauche, um nur die Index-Statistiken eher als eine vollständige Tabelle Statistiken. In Fall, dass Sie gerne von Index und Tabelle Statistiken, verwenden Sie wie unten beschrieben vor:
InformationsquelleAutor Wernfried Domscheit
Sammeln von optimizer-Statistiken auf partitionierten Tabelle ist nicht trivial, mit einigen Einschränkungen.
Besonders auf einer täglichen schema partitioniert, könnte es nicht die beste Lösung zu sammeln Partitionen Statistiken einmal pro Tag.
Demonstrieren, lassen Sie uns annehmen, wir haben nicht täglich schema aber jährlich Partitionen von Bewegungsdaten. Die Frage ist,
wäre es OK, um die Erstellung von Statistiken sagen, auf 1. Januar (oder 1. Juni oder 31. Dezember)?
Die Antwort ist definitiv NICHT, wie im ersten Fall die partition würde als (fast) leer, in den beiden letzten Fällen
die Statistik wäre realistisch, aber Sie kamen zu spät.
In diesem Sinn gibt es IMO drei mögliche Ansätze, damit umzugehen
1) sammeln von Statistiken auf alle (und dynamic sampling)
2) sammeln partition Statistik wiederholt (z.B. jede Stunde)
3) nicht Statistiken, sondern stellen Sie Sie so, dass die Abfragen führen Sie feine
Die beste option hängt von Ihren Daten und den Zugang Muster, so betrachte ich nur einige details zu der Umsetzung dieser Optionen.
Sample-Daten
Ermöglicht das erzeugen einer Tabelle mit einem vollen und einem fast leeren täglich Partitionen.
Die Tabelle besitzt einen lokalen index für die
GROUP_ID
Spalte. Der Zweck der übung ist es, eineFULL TABLE SCAN
beim Zugriff auf die kleine partition und eine
INDEX ACCESS
beim Zugriff auf die große partition.Dynamic Sampling
Wenn das Zielobjekt keine Statistiken überhaupt, Oracle führt durch dynamic-sampling (aka dynamische Statistik)
Mit ein wenig Aufwand Oracle berechnet die Statistik beim Parsen der Anweisung. Es kann also nicht veraltet.
Zugriff auf die fast leere partition Oracle richtige wählen
FULL TABLE SCAN
... beim Zugriff auf die komplette partition
INDEX ACCESS
verwendet wirdSo sehen wir, dass das dynamische sampling funktioniert gut, Auswahl der richtigen access-Methode.
Sammeln Partition Statistiken Häufig
Wiederholung der Versammlung job mildert das problem, dass die partition wächst ständig.
Den Zeitraum hängt von der transaction rate.
Beispiel von Statistiken für eine partition nur
Schlimmsten Fall muss vermieden werden, dass *die Statistiken zeigen, dass die partition leer ist, aber (in der Zwischenzeit) die partition ist bevölkert.
Set Statistics
Dieser Ansatz geht davon aus, dass die "richtigen" access-Pfad für die Abfragen bekannt ist. In unserem Beispiel
wir können den Zugriff auf eine fast leere partition mit einem
FULL TABLE SCAN
, aber der index-Zugriff ist in Ordnung für diese partitionwie gut. So können wir die partition Statistik so, dass immer ein INDEX-ZUGRIFF gemacht wird.
Eine mögliche (sehr einfachen) schema kopieren Sie die Statistik vom Vortag.
Dieser Aufruf kopiert den Statistiken von partition
SYS_P10029
partitionSYS_P10030
Also in anderen Worten, sofort nach der Erstellung der partition die Statistik initiiert werden, wie für den voll besiedelten partition.
InformationsquelleAutor Marmite Bomber
Statistiken sollten gesammelt werden, als Teil eines Prozesses, der wesentlich ändert die Daten. Verlassen Sie sich nicht auf nächtlichen jobs zum sammeln von Statistiken, vor allem in einem großen data warehouse.
Sammeln von Statistiken nur in nächtlichen jobs hat viele mögliche Nachteile:
Statistiken als Teil der data-load-Prozess hat viele potenzielle Vorteile. Da Sie verstehen, den Prozess und die Tabelle besser als einige generische nächtlichen Statistik-job können Sie die Vorteile von vielen erweiterten Funktionen:
Nicht auslagern Statistiken sammeln zu einigen anderen geplanten Auftrag. Statistiken sind so wichtig und schwierig, dass Sie sollten voll integriert sein, mit jedem Programm, dass bedeutende änderungen der Daten.
InformationsquelleAutor Jon Heller