View Full Version : SQL - optimize for xxx rows
Hallo,
Habe versucht mein interaktives rpg programm zu tunen (dynamisches sql mit cursor) und bei declare cursor 'for read only' und 'optimize for xxx rows' hinzugefügt. das erlaubt mir bereits seu nicht, kompillieren kann ich auch nicht. woran kann das liegen? geht das nur bei statischem sql? wie kann ich sonst ein dynamisches sql tunen?
mfg roman
Hallo,
Habe versucht mein interaktives rpg programm zu tunen (dynamisches sql mit cursor) und bei declare cursor 'for read only' und 'optimize for xxx rows' hinzugefügt. das erlaubt mir bereits seu nicht, kompillieren kann ich auch nicht. woran kann das liegen? geht das nur bei statischem sql? wie kann ich sonst ein dynamisches sql tunen?
mfg roman
Die FOR READ ONLY und die FOR OPTIMIZE OF Klausel sind Bestandteile des SELECT- und nicht des DECLARE-Statements.
Die Angaben müssen in den Command-String mit aufgenommen werden.
D Cmd S 256
*------------------------------------------------------
/Free
Cmd = 'Select Feld1, Feld2, Feld3 From MYFILE +
For Read Only Optimize for 5 Rows';
/End-Free
*
C/EXEC SQL Prepare CmdSql From :Cmd
C/END-EXEC
C/EXEC SQL Declare Csr1 Cursor For CmdSql
C/END-EXEC
Birgitta
Hallo Brigitta,
Vielen Dank für Deine Antwort, ich habe schon gehofft, dass Du dich auf meine Anfrage meldest. Habe sofort umgesetzt, funktioniert auch, aber leider nicht so wie ich mir das vorgestellt habe / ich glaube, ich habe 'optimize for..' falsch verstanden. wenn ich eine geringe Anzahle Sätze auswähle ist die Performance eine Spur besser als vorher, wenn aber eine Unmenge an Datensätzen daher kommt, sind die Antwortszeiten um vielefaches grösser. ich probiere es noch mit erstellen einer join-file - oder kannst Du mir sonstige Tipps geben?
Auf jeden Fall vielen Dank.
mfg Roman
Hallo Brigitta,
Vielen Dank für Deine Antwort, ich habe schon gehofft, dass Du dich auf meine Anfrage meldest. Habe sofort umgesetzt, funktioniert auch, aber leider nicht so wie ich mir das vorgestellt habe / ich glaube, ich habe 'optimize for..' falsch verstanden. wenn ich eine geringe Anzahle Sätze auswähle ist die Performance eine Spur besser als vorher, wenn aber eine Unmenge an Datensätzen daher kommt, sind die Antwortszeiten um vielefaches grösser. ich probiere es noch mit erstellen einer join-file - oder kannst Du mir sonstige Tipps geben?
Auf jeden Fall vielen Dank.
mfg Roman
Hallo Roman,
1. FOR OPTIMIZE OF - kann die Zeit, die der Optimizer zum Suchen des Optimalen Zugriffs-Weges verwendet, beeinflussen.
2. Eine JOIN-FILE anzulegen und dann im SQL-Statement zu verwenden bringt überhaupt nichts! Der Query Optimizer entnimmt der Join-File nur die Join- und Select/Omit-Informationen. Anschliessend wird das Query neu geschrieben und für jede verknüpfte Datei ein eigener Zugriffs-Weg gesucht. Eine SQL-View ist in diesem Fall eine bessere Lösung.
(Aber auch hier wird für jede verknüpfte Datei ein eigener Zugriffs-Weg gesucht.)
Wir habe die Erfahrung gemacht, dass eine Join-File die langsamste Verarbeitung ist, als nächstes folgt der direkte Join im Select-Statement und die schnellste Variante ist SQL-Views zu verwenden.
3. Du musst Dein SQL analysieren, entweder über STRDBG und anschliessend das Joblog anschauen oder besser noch über den iSeries Navigator / Visual Explain.
In beiden Fällen werden fehlende Indices vorgeschlagen. Nur über entsprechende Indices können SQL-Statements getuned werden.
Birgitta
Hallo Roman,
wieder mal ein typisches Beispiel dafür, dass Fragen ohne verständliche Erläuterung worum es wirklich geht, völlig sinnlos sind!!! Wenn ich bei Optimize for eine sehr große Anzahl angebe, dann ist ein full Table scan das schnellste, dauert aber für den ersten Satz sehr lange.
mfg
Dieter Bender
Hallo Brigitta,
Vielen Dank für Deine Antwort, ich habe schon gehofft, dass Du dich auf meine Anfrage meldest. Habe sofort umgesetzt, funktioniert auch, aber leider nicht so wie ich mir das vorgestellt habe / ich glaube, ich habe 'optimize for..' falsch verstanden. wenn ich eine geringe Anzahle Sätze auswähle ist die Performance eine Spur besser als vorher, wenn aber eine Unmenge an Datensätzen daher kommt, sind die Antwortszeiten um vielefaches grösser. ich probiere es noch mit erstellen einer join-file - oder kannst Du mir sonstige Tipps geben?
Auf jeden Fall vielen Dank.
mfg Roman