Beinahe hätte ich einen Artikel im Oracle Optimizer blog unerwähnt gelassen ... Diesmal schreibt Allison Lee (nehme ich jedenfalls an: im Artikel erscheint nur der Vorname) über das Zusammenspiel von adaptive cursor sharing (ACS) und SQL plan management (SPM). Grundsätzlich gilt dabei:
If a child cursor is bind-aware, the decision to share or not is made irrespective of whether the query is controlled by SPM. But once the query and its current bind values are sent to the optimizer for optimization, SPM constrains the optimizer's choice of plans, without regard to whether this query is being optimized due to ACS.
Zur Erläuterung der Aussage dient ein Beispiel mit einer Tabelle mit relativ starken skew Effekten (also einer deutlichen ungleich-Verteilung der Werte), auf die mit drei Queries mit unterschiedlichen Bindewerten zugegriffen wird, wobei der Hint BIND_AWARE dafür sorgt, dass ACS bei der ersten Ausführung wirksam wird. Im Beispiel werden nur zwei der drei Pläne über die DBMS_SPM-Prozedur LOAD_PLANS_FROM_CURSOR_CACHE geladen. Daraus ergibt sich: " Now if we run the query with the three different bind values, SPM will constrain the optimizer to pick from the two accepted plans in the SQL plan baseline." Mein Eindruck ist, dass die beiden Features nicht unbedingt vollständig miteinander harmonieren: für eine Query, für die ACS wirksam ist, würde ich SPM nicht unbedingt in Betracht ziehen, sofern die Anzahl potentiell relevanter Pläne nicht sehr überschaubar ist.
Keine Kommentare:
Kommentar veröffentlichen