Sonntag, April 21, 2013

METHOD_OPT für DBMS_STATS

Maria Colgan erläutert dieser Tage im CBO-Entwicklungs-Blog die Funktion des METHOD_OPT-Parameters. Der Artikel enthält nicht unbedingt Neues, stellt aber eine schöne Zusammenfassung dar. Grundsätzlich bestimmt der METHOD_OPT-Parameter:
  • die Erstellung von Basisstatistiken für Spalten
  • die Erstellung von Histogrammen
  • die Erstellung von Extended Statistics
Die Syntax des Parameters zerfällt in zwei Teile:
Teil 1: bestimmt die Spalten, für die Statistiken erfasst werden
FOR ALL [INDEXED|HIDDEN] COLUMNS
Teil 2: bestimmt die Histogramm-Erstellung
SIZE [SIZE_CLAUSE]
Für Teil 1 gilt, dass weder FOR ALL INDEXED COLUMNS noch FOR ALL HIDDEN COLUMNS wirklich sinnvoll sind, denn Statistiken werden natürlcih nicht nur für indizierte oder virtuelle Spalten benötigt, sondern für alle Spalten, die der CBO betrachten muss. Für eine Spalte, die nicht in der Statistikerfassung berücksichtigt wird, wird nur die column length bestimmt (um die row length bestimmen zu können), jedoch nicht dauerhaft gespeichert.

Für Teil 2 gibt es folgende SIZE_CLAUSE Varianten:
  • AUTO: Oracle bestimmt die erforderlichen Histogramme auf der Basis von COL_USAGE$.
  • (integer value) 1-254: explizite Angabe der Anzahl der Buckets für die Histogramm-Erstellung. Sind Histogramme gewünscht, kann man immer auf 254 gehen, da nur den benötigte Anzahl verwendet wird.
  • REPEAT: Histogramme werden nur für Spalten angelegt, die bereits Histogramme hatten. Die Einstellung ist nicht empfohlen, da sie auch die Bucket-Anzahl aus der vorherigen Erstellung übernimmt.
  • SKEWONLY: erzeugt Histogramme nur für Spalten mit deutlich uneinheitlicher Datenverteilung.
Um die Histogrammerstellung auf eine einzelne Spalte CUST_ID zu beschränken, ist folgende Parameter-Angabe zu verwenden:
FOR ALL COLUMNS SIZE 1 FOR COLUMNS SIZE 254 CUST_ID
(wobei ich die Reihenfolge der Angaben nicht unbedingt intuitiv finde.) Um extended statistics anzulegen, verwendet man:
FOR ALL COLUMNS SIZE 1 FOR COLUMNS SIZE 254 (PROD_ID, CUST_ID)
Abschließend schlägt Frau Colgan in ihrem Artikel noch vor, die METHOD_OPT-Angabe über DBMS_STATS.SET_TABLE_PREFS festzulegen. 

Keine Kommentare:

Kommentar veröffentlichen