In den letzten Wochen hat Franck Pachot eine Reihe interessanter Artikel zum Verhalten von SQL Plan Directives veröffentlicht, die ich an dieser Stelle grob vereinfachend zusammenfasse. Eine Einleitung zum Thema wollte ich mir eigentlich sparen, da ich etwas Derartiges hier bereits untergebracht hatte, aber der Herr Pachot hat es in Matching SQL Plan Directives and extended stats so schön zusammengefasst, dass ich mir seine Erklärung ausborge:
SQL Plan Directives in USABLE/MISSING_STATS state can create column groups and extended stats on it at the next dbms_stats gathering. When the next usage of the SPD validates that static statistics are sufficient to get good cardinality estimates, then the SPD goes into the SUPERSEDED/HAS_STATS state. If an execution still see misestimates on them, then the state will go to SUPERSEDED/PERMANENT and dynamic sampling will be used forever. Note that disabled SPD can still trigger the creation of extended statistics but not the dynamix sampling.
Die Artikel beschäftigen sich mit diversen Detailfragestellungen:
- DBA_SQL_PLAN_DIRECTIVE.LAST_USED: weist darauf hin, dass die last_used-Angabe in der View nur eine sehr eingeschränkte Präzision besitzt und bei Verwendung um das eigenartige Inkrement 6,5 Tage erhöht wird.
- Matching SQL Plan Directives and extended stats: leider gibt es keinen direkten Weg, um die Direktiven (aus DBA_SQL_PLAN_DIRECTIVES) mit den zugehörigen extended statistics (DBA_STATS_EXTENSION) zu verknüpfen, da sich das Format der gespeicherten Daten unterscheidet (XML bzw. CLOB). Man kann allerdings eine Query zum Parsen der Angaben formulieren und die Resultate dann joinen - und genau das hat der Herr Pachot auch getan. Außerdem formuliert er eine Reihe interessanter Fragen zum Umgang mit dem Feature, die aber keine definitive Antwort erhalten (können).
- How to import SQL Plan Directives: zeigt, wie man Direktiven in eine Staging Tabelle packt, transportiert und andernorts wieder auspackt (wobei packen und entpacken über dbms_spd-Routinen realisiert sind). Das Verfahren ähnelt dem, das beim Transport von SQL Plan Baselines zu verwenden ist.
- Matching SQL Plan Directives and queries using it: erläutert, dass es nicht ganz leicht ist, zu bestimmen, weil Direktive für welche Query verwendet wurde: explain plan (bzw. dbms_xplan.display) liefert diese Information, aber sie fehlt in v$sql_plan: "It's not easy to match all queries that can use a SQL Plan Directive, but you can do it on the other way: do an explain plan for each query you suspect and check the notes. If you are ready to parse a lot of queries, you can also do it automatically."
Offensichtlich beschäftigt sich Frank Pachot zur Zeit recht intensiv mit dem Thema, so dass ich vermute, dass da noch weitere Artikel zu erwarten sind, die ich gegebenenfalls zu ergänzen plane.
Keine Kommentare:
Kommentar veröffentlichen