2017-06-30 4 views
0

Ich brauche Erläuterung, wie DBMS_STATS.GATHER_TABLE_STATS funktioniert. Ich habe ein Szenario, wo ich Tabelle erstellen und die gleiche Tabelle in der Paketerstellung auch verwendet wird. Mit anderen Worten ist die Paketkompilierung abhängig von der Tabellenerstellung.Wie funktioniert DBMS_STATS.GATHER_TABLE_STATS in Oracle

Muss DBMS_STATS.GATHER_TABLE_STATS nach dem Indexerstellungsbefehl im Tabellenerstellungsskript enthalten sein.

In welcher Situation DBMS_STATS.GATHER_TABLE_STATS funktioniert, ob für die Paketkompilierung oder die Paketausführung. Bitte bestätigen Sie.

+0

Die Paketkompilierung hängt von der Tabellenerstellung und ihren korrekten Berechtigungen ab, nicht von den Statistiken, die für die Tabelle gesammelt wurden. Sie sollten nur versuchen, Statistiken manuell zu erfassen, wenn Ihr SQL in dieser Tabelle länger als erwartet dauert und Ihr EXPLAIN-Plan nicht optimal ist. – sandman

+0

"Die Paketkompilierung hängt von der Tabellenerstellung ab" Dies ist eine schlechte Vorgehensweise. Sie sollten keine Tabellen im laufenden Betrieb erstellen. – APC

Antwort

0

DBMS_STATS stellt dem Oracle-Optimierer Informationen zur Verfügung, mit denen Oracle effiziente Ausführungspläne für SQL-Anweisungen erstellen kann. Optimiererstatistiken sind niemals zum Kompilieren von Objekten erforderlich.

Sammeln von Statistiken ist ein so kompliziertes Thema, dass es schwierig sein kann, die richtigen Fragen zu stellen. Ich würde empfehlen, mit dem Lesen des Handbuchs zu beginnen, z. B. Managing Optimizer Statistics: Basic Topics.

Regel so etwas wie dies Ihre Statistiken Strategie sammeln sollte aussehen:

  1. Statistiken manuell erfassen, wenn ein Daten des Objekts deutlich verändert.
  2. Verwenden Sie die Standard-Autotask zum automatischen Sammeln von Statistiken für Objekte, die sich langsam geändert haben oder versehentlich vergessen wurden.

einige spezifische Fragen zu beantworten, die Sie tun wahrscheinlich nicht wollen Statistiken sammeln, direkt nach dem Erstellen einer Tabelle. Sammeln Sie nur Statistiken nach dem Ändern der Daten. Das Sammeln von Statistiken zu einer leeren Tabelle kann gefährlich sein; Oracle wird denken, dass die Tabelle 0 Zeilen hat, bis die Statistiken das nächste Mal gesammelt werden. Es wäre besser, überhaupt keine Statistiken zu haben, dann kann Oracle dynamische Stichproben verwenden, um die Statistiken zu schätzen.

(Wenn andererseits die Tabelle als SELECT-Anweisung erstellt wird und viele Daten enthält, können Sie Statistiken sammeln. Wenn Sie 12c verwenden, werden bei der Erstellung von Statistiken u. U. automatisch Statistiken erfasst Tabelle.)

Sie müssen nach dem Erstellen eines Indexes in der Regel auch keine Statistiken erfassen. Oracle sammelt automatisch Indexstatistiken, wenn ein Index erstellt oder neu erstellt wird.

Verwandte Themen