[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2004
    Beiträge
    327

    embedded SQL Performance Problem mit SCROLL

    Hallo *All,
    ich habe folgendes Problem:

    In einem SQLRPGLE Program soll eine volldynamische Subfile gefüllt werden (nur 15 Sätze je Seite einlesen). Volldynamisch, weil in diesem Programm mit zwei Subfiles gearbeitet wird. Mit F11 kann dann innerhalb der Subfiles hin und her geschaltet werden.
    Für das Rückwärtsblättern wollte ich fetch relative verwenden. Hierfür benötigt man in der declare Anweisung das Schlüsselwort SCROLL.

    Mein Problem ist nunmehr. Die Performance geht dermaßen in den Keller, sobald in der prepare Anweisung mit SCROLL gearbeitet wird.
    Das gleiche Programm ohne SCROLL ist rasant schnell (implementiert noch ohne Rückwärtsblättern)

    Im Debug Modus habe ich gesehen, dass in beiden Varianten die gleichen Indizes gefunden werden. Es ist alles gleich. Nur mit Scroll 2 Sekunden, ohne Scroll 4 Minuten. Diese Performanceunterschiede finden schon beim Open statt.

    SQL wird dynamisch zusammengebaut.

    Anbei die statements:

    SELECT OHODDD, OHODMM, OHODYY, OHODCC, OHSODN, ODPLIN, ODSLIN
    FROM OHTRNP, ODTRNP
    WHERE OHSODN = ODSODN AND
    (ODODPT = '21451-19A00-000' OR ODALPT = '21451-19A00-000')
    ORDER BY OHODCC DESC, OHODYY DESC, OHODMM DESC,
    OHODDD DESC, OHSODN DESC


    c/EXEC SQL
    c+ PREPARE S2 FROM :W@SQLSTRING
    c/END-EXEC
    **
    c/EXEC SQL
    c+ DECLARE C2 SCROLL CURSOR FOR S2
    c/END-EXEC
    **
    c/EXEC SQL
    c+ OPEN C2
    c/END-EXEC
    **

    ** Vorwärtsblättern

    c if W@Direct = 'ROLLUP'
    c/exec sql
    c+ FETCH NEXT FROM C2 FOR 15 ROWS INTO : W@SqlData
    c/end-exec
    c else
    ** Rückwärtsblättern
    c/exec sql
    c+ FETCH RELATIVE :n FROM C2 FOR 15 ROWS INTO : W@SqlData
    c/end-exec
    c endif


    Ich hoffe, Ihr könnt mir weiterhelfen.

    Im voaus besten Dank.

    mfg
    Klaus

  2. #2
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo Klaus,

    Zitat Zitat von itec01
    Für das Rückwärtsblättern wollte ich fetch relative verwenden. Hierfür benötigt man in der declare Anweisung das Schlüsselwort SCROLL.
    Warum neu lesen für das rückwärts blättern? das schnellste ist hier immer resident halten (dynamische Datenstruktur oder meine Open Source Hashtable)

    Zitat Zitat von itec01
    Im Debug Modus habe ich gesehen, dass in beiden Varianten die gleichen Indizes gefunden werden. Es ist alles gleich. Nur mit Scroll 2 Sekunden, ohne Scroll 4 Minuten. Diese Performanceunterschiede finden schon beim Open statt.
    Wenn das sicher ist, dann lässt sich das mit prepared Statements oder statischem SQL heilen (für jede Sortierung eigener Cursor, where Kriterien preparen und Auswahllogik)
    Wobei das Ganze für mich nicht ganz klar ist, so auf den ersten Blick dürfte der Cursor read only sein und blocken nicht verboten; könnte auch ein Bug in der Database sein, was sagt denn euer Group PTF Stand?

    mfg

    Dieter Bender
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  3. #3
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von BenderD
    Hallo Klaus,



    Warum neu lesen für das rückwärts blättern? das schnellste ist hier immer resident halten (dynamische Datenstruktur oder meine Open Source Hashtable)



    Wenn das sicher ist, dann lässt sich das mit prepared Statements oder statischem SQL heilen (für jede Sortierung eigener Cursor, where Kriterien preparen und Auswahllogik)
    Wobei das Ganze für mich nicht ganz klar ist, so auf den ersten Blick dürfte der Cursor read only sein und blocken nicht verboten; könnte auch ein Bug in der Database sein, was sagt denn euer Group PTF Stand?

    mfg

    Dieter Bender
    Hallo Dieter,
    danke für die Info. Aktueller PTF Stand = TL04077.

    Was verstehts Du unter Daten resisdent halten?

    Ich habe mal für Testzwecke das Programm auf statisches SQL umgestellt. Genau das gleiche Ergebnis. Mit Scroll dauert 4 Minuten. Eins habe ich noch gefunden. In einem anderen SQLRPG, jedoch mit nur einer Datei im SELECT, funktioniert das gleiche wunderbar. Seltsam.

    Gruss

  4. #4
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo Klaus,

    PTF Stand: TL04077 sagt nix über Group PTF Database aus!!! je nach Release gibt es eine DTAARA, die den Stand enthält oder unter V5R3 den OS400 Command WRKPTFGRP (V5R2 SF99502 ; V5R1 SF99501 ; V4R5 SF99105 ?) Wenn Du für Dein Release (vor V5R3) keine DTAARA findest, dann besorge Dir erst mal das Group PTF und installiere es - dann ist die Datenbank eh' kaputt.

    Daten resident halten := im Programm merken was man schon gelesen hat.

    Dann solltest Du mal beide Versionen (statisch/dynamisch unter Debug ausführen, dann bekommst Du detaillierte Nachrichten des Query Optimizers, die Dir genau mitteilen was die Datenbank aus Deinen Statements macht; bei diesen Nachrichten sind auch die second level Infos (F1) wichtig! 4 Minuten riecht nach Full Table scan, Index Aufbau oder Bug.

    mfg

    Dieter Bender

    Zitat Zitat von itec01
    Hallo Dieter,
    danke für die Info. Aktueller PTF Stand = TL04077.

    Was verstehts Du unter Daten resisdent halten?

    Ich habe mal für Testzwecke das Programm auf statisches SQL umgestellt. Genau das gleiche Ergebnis. Mit Scroll dauert 4 Minuten. Eins habe ich noch gefunden. In einem anderen SQLRPG, jedoch mit nur einer Datei im SELECT, funktioniert das gleiche wunderbar. Seltsam.

    Gruss
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  5. #5
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von BenderD
    Hallo Klaus,

    PTF Stand: TL04077 sagt nix über Group PTF Database aus!!! je nach Release gibt es eine DTAARA, die den Stand enthält oder unter V5R3 den OS400 Command WRKPTFGRP (V5R2 SF99502 ; V5R1 SF99501 ; V4R5 SF99105 ?) Wenn Du für Dein Release (vor V5R3) keine DTAARA findest, dann besorge Dir erst mal das Group PTF und installiere es - dann ist die Datenbank eh' kaputt.

    Daten resident halten := im Programm merken was man schon gelesen hat.

    Dann solltest Du mal beide Versionen (statisch/dynamisch unter Debug ausführen, dann bekommst Du detaillierte Nachrichten des Query Optimizers, die Dir genau mitteilen was die Datenbank aus Deinen Statements macht; bei diesen Nachrichten sind auch die second level Infos (F1) wichtig! 4 Minuten riecht nach Full Table scan, Index Aufbau oder Bug.

    mfg

    Dieter Bender
    Hallo Dieter,
    Sorry, Group PTF = SF99519.

    Eins ist mir noch aufgefallen, dass die Datei QAQQINI in der Bibliothek nicht gefunden wird. Könnte dies etwas mit zu tun haben?

    Gruss
    Klaus

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo Klaus,

    SF99519??? welches Release habt ihr denn?
    QAQQINI, das ist normal.

    mfg

    Dieter

    Zitat Zitat von itec01
    Hallo Dieter,
    Sorry, Group PTF = SF99519.

    Eins ist mir noch aufgefallen, dass die Datei QAQQINI in der Bibliothek nicht gefunden wird. Könnte dies etwas mit zu tun haben?

    Gruss
    Klaus
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  7. #7
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von BenderD
    Hallo Klaus,

    SF99519??? welches Release habt ihr denn?
    QAQQINI, das ist normal.

    mfg

    Dieter
    Hallo Dieter,
    V5R2M0

    Gruss
    Klaus

  8. #8
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo Klaus,

    dann muss es eine DTAARA SF99502 geben und in der steht dann der Gruppenptf Stand drin.

    Dieter

    Zitat Zitat von itec01
    Hallo Dieter,
    V5R2M0

    Gruss
    Klaus
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  9. #9
    Registriert seit
    Sep 2004
    Beiträge
    327
    Zitat Zitat von BenderD
    Hallo Klaus,

    dann muss es eine DTAARA SF99502 geben und in der steht dann der Gruppenptf Stand drin.

    Dieter
    Hallo Dieter,
    DTAARA habe ich nicht gefunden. Hier der Auszug aus dem Befehl WRKGRPPTF:
    SF99519 105 Installiert
    SF99502 14 Installiert

    Ich habe mich aber jetzt entschieden Deinen ersten Weg zu gehen. Rückwärts lesen steuere ich nun über arrays und scroll lasse ich weg. Trotzdem vielen Dank für Deine prompte Unterstützung.

    Gruss
    Klaus

  10. #10
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    Hallo,

    SF99502 sieht eigentlich OK aus, aber die zeitliche Strafe für den Scrool Cursor ist eindeutig zu hoch - Ferndiagnose allerdings recht kompliziret.

    mfg

    Dieter Bender

    Zitat Zitat von itec01
    Hallo Dieter,
    DTAARA habe ich nicht gefunden. Hier der Auszug aus dem Befehl WRKGRPPTF:
    SF99519 105 Installiert
    SF99502 14 Installiert

    Ich habe mich aber jetzt entschieden Deinen ersten Weg zu gehen. Rückwärts lesen steuere ich nun über arrays und scroll lasse ich weg. Trotzdem vielen Dank für Deine prompte Unterstützung.

    Gruss
    Klaus
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

Similar Threads

  1. Embedded SQL in VARPG
    By Squall in forum NEWSboard Programmierung
    Antworten: 23
    Letzter Beitrag: 18-10-06, 12:01
  2. embedded SQL statisch oder dynamisch
    By Jamikl in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 30-06-06, 09:48
  3. RPG mit Embedded SQL, JOIN ..
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 18-06-06, 12:14
  4. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 09:43
  5. Character verbinden in Embedded SQL
    By e_sichert in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 03-05-06, 10:47

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •