Database Reference
In-Depth Information
Der Schritt 9 ist der kritische Schritt im obigen Ausführungsplan. In diesem Schritt wur-
den61715DatensätzebeidemIndexRangeScangelesen.FürjedengelesenenDatensatz
wurdeaufdieTabelleDOCUMENTüberdieROWIDimSchritt8zugegriffen.Dabeient-
standendiemeistenDiskReads(239)unddiemeistenBufferGets(12384),waslogischer-
weisediegrößteLaufzeitverursachte(8,28Sekunden).Auffälligwar,dassdieKardinalität
diesesSchritteslediglich146betrug.Schauenwirjetzt,welcheDatenindiesemSchritt
ausgefiltert wurden.
3UHGLFDWH,QIRUPDWLRQLGHQWLILHGE\RSHUDWLRQLG
ILOWHU'9$5,$17(,' ;$1'''(/,9(5<'$7(7,0(! *5($7(6772B'$7(
V\\\\PPGGKKPLVV72B'$7(''00<<++0,$1'
''(/,9(5<'$7(7,0( /($6772B'$7(V\\\\PPGG
KKPLVV72B'$7(''00<<++0,
WennwirdenIndexDOCUMENT_SUPPLIERGLNumdieSpaltenDELIVERYDATETI-
MEundVARIANTEIDerweiternwürden,würdenwirbereitsimSchritt9lediglich146
statt 61715 Datensätze selektieren. Der Schritt 8 mit dem Tabellenzugriff über die RO-
WID würde bestehen bleiben, weil man dort die Spalten WORKFLOWID, WORKFLOW-
COUNTERfürdieJoinsmitderTabelleWORKFLOWbzw.mitderTabellePOSITION
undfürdasEndergebnisermittelnmuss.DadieweitereAnalyseergab,dassdieSpalteVA-
RIANTEIDnichtselektivist,erweitertemandenIndexDOCUMENT_SUPPLIERGLN
lediglichumdieSpalteDELIVERYDATETIME.
DieMethodemitderIndexerweiterungfindeichwenigergefährlichalsdasAnlegen
einesneuenIndexes,weildieWahrscheinlichkeit,dassderumeineoderumeinigeSpalten
erweiterteIndexdiePerformanzandererSQL-Anweisungenverschlechtert,geringerist.
SQL-TuningisteiniterativerProzess.AusdiesemGrundistesvorteilhaft,wennman
diejeweiligeSQL-AnweisungbeimSQL-Tuningmehrmalsausführenkann.
P: „ Das ist doch nicht immer möglich .“
L: „ Ja, das ist nicht immer möglich. Ein DML-Kommando darf man beispielsweise nicht auf
einem produktiven System ausführen, weil es die produktiven Daten ändern und den zusätzli-
chen Speicher für die jeweiligen Segmente allozieren kann. Die Änderungen an den Daten kann
man mit einem ROLLBACK zurückspielen, den allozierten Speicher kann man aber nicht mehr
freigeben. Statt des DML-Kommandos kann man den darunterliegenden Select ausführen .“
P.: „ Was ist mit den Bind-Variablen, falls die SQL-Anweisung welche beinhaltet?
L.: „ Für wichtige Standard-Datentypen ( wie z. B. VARCHAR2 oder NUMBER ) kann man
die jeweiligen Variablen in SQL*Plus definieren. Für einige Datentypen, die man nicht in
SQL*Plus definieren kann ( z. B. DATE ) , kann man eine Variable vom Typ VARCHAR2 für
den jeweiligen Bind-Wert benutzen und diesen Wert explizit ( mit der Funktion TO_DATE )
oder implizit ( mit ALTER SESSION SET NLS_DATE_FORMAT “) in den Typ DATE kon-
vertieren .
Die Werte der Bind-Variablen kann man in der View V$SQL_BIND_CAPTURE ermit-
teln. Die Werte von User Bind Peeking kann man dafür eventuell auch gebrauchen .
Es ist möglich, dass die ermittelten Werte der Bind-Variablen nicht mehr zu gebrauchen
Search WWH ::




Custom Search