Freitag, September 02, 2011

Frequency-Histogramme und die 254 Bucket-Grenze

Und gleich die nächste interessante Quizfrage im Blog des Herrn Foote. Bei der letzten Frage war mir die Antwort schon vor der Auflösung klar, aber diesmal hatte ich absolut keine Erklärung für das beschriebene Verhalten: für eine Spalte existierte ein Frequency-Histogramm so lange darin 254 unterschiedliche - und gleichverteilte - Werte vorlagen. Das Hinzufügen eines einzelnen Satzes mit einem neuen und weit außerhalb des bisherigen Ranges liegenden Wert (also Nr. 255) führte dann dazu, dass bei erneuter Statsitikerzeugung mit der METHOD_OPT SIZE AUTO Option kein Histogram mehr erzeugt wurde - obwohl ein solches mit der neuen Datenverteilung sehr viel sinnvoller gewesen wäre als für den Fall vor der Ergänzung (für den ohnehin eine Gleichverteilung galt, die der cbo in Abwesenheit von Histogrammen von vornherein angenommen hätte). Die Erklärung des Verhaltens lautet:
When using METHOD_OPT SIZE AUTO, every column with 254 or less distinct values that has been referenced within a predicate, will have a Frequency-based histogram. Each and every one of them, regardless of whether the data is actually skewed or not.
[...]
If a column has more than 254 distinct values, whether it then has a Height-Based histogram depends on how the data is skewed.
Für die Spalte mit dem neuen und von den bisherigen Werten massiv abweichenden Wert gilt:
Having inserted the outlier value, it now has 255 distinct values and so no longer qualifies for an automatic frequency based histogram. However, if all its values are evenly distributed, then it won’t qualify for a height based histogram either and Column 3 only has just the one outlier value, all other values are evenly distributed values. Unfortunately, Oracle doesn’t pick up on rare outlier values (even if you collect 100% statistics and it’s one of the low/high points of the column) and so will not generate a height-based histogram.
Der Artikel führt auch noch vor, dass das Fehlen des Histogramms dann recht extreme Fehleinschätzungen des cbo nach sich zieht, da dieser nun wieder eine Gleichverteilung annimmt. Vorgestern Abend bin ich an dieser Quizfrage fast 1,5 h hängengeblieben - es ist einfach großartig, was man bei den kompetentesten Oracle-Bloggern alles lernen kann.

Nachtrag 03.09.2011: Randolf Geist hat in einem Kommentar zu Richard Footes Artikel noch einige wichtige Details zur Kostenberechnung des CBO mit Frequency Histograms ausgeführt.

Keine Kommentare:

Kommentar veröffentlichen