Freitag, April 22, 2016

Extended Statistics und CHAR Spalten

Vor Problemen bei der Verwendung von Extended Statistics - also Statistiken für mehrere (in der Regel korrelierte) Spalten, die intern über eine virtuelle Spalte abgebildet werden - warnt Jonathan Lewis in seinem jüngsten Sratchpad-Artikel. Der Hintergrund des Problems ist folgender: für eine einzelne CHAR-Spalte (in diesem Fall CHAR(2)) mit Histogram ist der Optimizer klug genug zu erkennen, das Blanks, die am Ende eines zum Vergleich herangezogenen Literals angehängt werden, keinen Einfluß auf die Selektivität des Prädikats haben: col = 'X' und col = 'X ' liefern demnach die gleiche Kardinalität im Ausführungsplan. Wiederholt man diesen Versuch mit Ergänzung einer zweiten Spalte im WHERE, wobei über beide Spalten der Bedingung Extended Statistics erzeugt wurden, dann liefert nur die Variante mit col = 'X ' das richtige Ergebnis. Jonathan Lewis vermutet, dass der Optimizer in diesem Fall "vergisst", dass ein CHAR-Wert im Spiel ist, wenn die Funktion sys_op_combined_hash() aufgerufen wird, mit der die Werte der virtuellen Spalte der Column Group erzeugt werden, so dass der HASH-Vergleich kein Ergebnis liefert. Laut Aussage des Oracle Supports (in den Kommentaren) handelt es sich um einen Bug. Da Column Groups in 12c unter entsprechenden Voraussetzungen automatisch erzeugt werden, sollte man sich dieses Problems bewusst sein. Allerdings mag ich CHAR ohnehin nicht besonders, so dass der Typ in meinen Tabellen nicht auftaucht.

Keine Kommentare:

Kommentar veröffentlichen