Database Reference
In-Depth Information
6.1.2
Feature Autotrace in SQL*Plus
Mit diesem Feature muss man meiner Meinung nach etwas aufpassen. Einige Datenbank-
administratoren denken, dass der Ausführungsplan in diesem Modus angezeigt wird.
Leonid: „
Peter, teilst Du auch diese Meinung?
“
Peter: „
Wenn Du so fragst, dann stimmt es wahrscheinlich nicht. Aber ehrlich gesagt, ich
habe in der Tat so gedacht.
“
L.: „
Bei Autotrace wird Explain-Plan angezeigt.
“
P.: „
Warum ist es schlecht?
“
L.: „
Das ist nicht schlecht. Nur wenn eine SQL-Anweisung in diesem Modus ausgeführt
wird, erwartet man logischerweise die Anzeige des jeweiligen Ausführungsplans. Die Anzeige
eines Explain-Plans statt des Ausführungsplans war nicht so wichtig in den alten Versionen
von Oracle, bei denen diese beiden Pläne in der Regel identisch waren. In den neuen Versio-
nen unterscheiden sie sich wesentlich häufiger.
“
P.: „
Wo muss man sonst bei dem Modus Autotrace aufpassen?
“
L.: „
In diesem Modus werden DDL- und DML-Kommandos immer ausgeführt.
“
P.: „
Auch wenn man diesen Modus mit der Einstellung ‚set autotrace traceonly explain'
setzt?
“
L.: „
Ja, auch in diesem Fall. Wenn man beispielsweise auf die Idee kommt, Explain-Plan
für ein DDL-Kommando mit Autotrace zu ermitteln, wird man sehr unangenehm überrascht,
weil dieses Feature dafür absolut nicht geeignet ist.
“
SQL> set autotrace traceonly explain
SQL>
SQL> create index i2_ln_test on ln_test(a) online;
Index wurde erstellt.
P.: „
Ich habe immer gedacht, dass keine SQL-Anweisungen bei der Einstellung ‚set autotrace
traceonly explain' ausgeführt werden.
“
L.: „
Das betrifft ausschließlich Selects.
“
P.: „
Es freut mich, dass ich hier zumindest zum Teil Recht hatte. Das ist doch gut, dass man
mit Autotrace Explain-Pläne für Selects ohne Ausführung ermitteln kann. Oder?
“
L.: „
Leider muss man damit auch aufpassen. Wenn Du Deine Einstellung mit der Option
‚statistics' ergänzen würdest (die die Ermittlung der Laufzeitstatistiken verlangt), wird Dein
Select logischerweise ausgeführt.
“