[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte

Hybrid View

  1. #1
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Ich kann mich nur der getKey-Methode anschließen.

    Ansonsten kann es auch daran liegen, dass ...
    *) ist die Reihenfolge vom Index falsch ist
    *) der Index nicht verwendet werden kann, weil SQL intern Casten muss.
    *) euer Release 6.1 oder kleiner ist, es ein Index ist mit Select/Omit und in der QAQQINI Ignore d. index gesetzt ist.
    *) usw.

    Wird denn überhaupt ein Index verwendet, wenn er alle Sätze liest?

    lg Andreas

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.217
    Erstmal vielen Dank für die zahlreichen Antworten.
    Hier noch ein paar Fakten dazu:

    - Wir sind auf V7
    - Der passende Index wird verwendet (laut Visual Explain)

    Der Ablauf bei Visual Explain ist folgender:
    1.) Index Probe
    2.) Temporary List
    3.) List Scan
    4.) Final Select

    Die Idee mit der Key-Tabelle passt mir für diese Aufgabenstellung im Moment nicht so gut. So eine Tabelle setzen wir im Moment immer da ein, wo wir globale IDs für Tabellen ermitteln (genauso, wie ihr das beschrieben habt: mit Sperrung).

    Ich habe das betreffende Programm eben mal in einer Testumgebung so umgebaut, dass es nicht mit SQL arbeitet, sondern mit SETGT und READPE. Jetzt ist läuft das Programm in 30 Sekunden durch. Mit SQL dauert es 4 Minuten.

    Meine eigentliche Frage ist, ob man davon ausgehen muss, dass SQL bei Aggregatfunktionen (insbesondere bei Max) viel langsamer ist als ein "manueller" Zugriff mit RPG-Bordmitteln. Wenn das so ist, muss man das eben hinnehmen und genau hinschauen, wann man welches Verfahren verwendet.

    Dieter

  3. #3
    Registriert seit
    Mar 2002
    Beiträge
    5.379
    ... bei Aggregat Funktionen ist SQL im Allgemeinen schneller und im speziellen Fall langsamer und hier habt ihr es mit einem solchen zu tun.
    DB2 auf der AS/400 ist immer noch optimiert für sequentiellen und ISAM (Index sequentiellem) Zugriffe. Das ändert sich nicht durch Marketing Aussagen (SQL ist immer schneller), egal wer das alles glaubt (soll es hier im Forum auch geben) und wird solange so bleiben, wie unter der Oberfläche eine ISAM Datenbank liegt.

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

  4. #4
    Registriert seit
    Jan 2012
    Beiträge
    1.217
    Vielen Dank für die Antwort.
    Das bestätigt meine Vermutung. Wenn man das weiß, kann man sich beim Programmieren ja darauf einstellen.

    Gruß,
    Dieter

  5. #5
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Lest ihr den neuen Key in der Anwendung an einer zentralen Stellen ein (Prozedur, Programm)?
    Wenn du ein SELECT INTO machst erstellt das System automatisch einen Cursor dafür. Wenn du das SELECT INTO nun an verschiedenen stellen machst, hast du mehrere Cursor bei denen jedes mal der Datenpfad geöffnet werden muss.

    In RPG macht man ja auch nicht ständig ein OPEN(Tabelle).

    Starte einfach mal einen Performance Monitor.
    Dort siehst du dann auch wie oft der Datenpfad geöffnet wurde und wie oft er wieder verwendet worden ist.
    Im Idealfall muss er maximal 2 mal geöffnet werden.

  6. #6
    Registriert seit
    Jan 2012
    Beiträge
    1.217
    Wir haben ein Serviceprogramm, das den neuen Key ermittelt. Das ist die einzige Stelle, die das macht. Allerdings wird das Serviceprogramm von verschiedenen Programmen aufgerufen.

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.934
    Zitat Zitat von dschroeder Beitrag anzeigen
    Wir haben ein Serviceprogramm, das den neuen Key ermittelt. Das ist die einzige Stelle, die das macht. Allerdings wird das Serviceprogramm von verschiedenen Programmen aufgerufen.
    Wenn die Programme in unterschiedlichen Aktivierungsgruppen laufen und das Service-Programm mit Aktivierungsgruppe *CALLER erstellt wurde, kannst Du innerhalb eines Jobs mehrere Duplikate haben und folglich mehrere FULL OPENS, da jedes SQL-Statement seinen eigenen ODP erhält.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 5. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Jan 2012
    Beiträge
    1.217
    Das ist bei uns sicher der Fall. Das eigentliche Performanceproblem wird aber durch große Schleifen ausgelöst, in denen immer wieder in die Datei geschrieben wird. Ich hoffe, dass da nicht immer wieder ein Datenpfad neu geöffnet werden muss.

    Dieter

  9. #9
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    ... und damit kommen wir wieder zum Stichwort Performance Monitor
    Dort siehst du dann sogar in der Zusammenfassung ganz am Anfang welche und wieviele OPENs gemacht wurden.

    lg Andreas

  10. #10
    Registriert seit
    Jan 2012
    Beiträge
    1.217
    Mit dem Performance Monitor tue ich mich immer wieder etwas schwer. Wir benutzen das Tool so selten. Deshalb ist es immer wieder etwas aufwendig, da einzusteigen.

    Aber wahrscheinlich muss ich das wohl machen.

    Dieter

    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    ... und damit kommen wir wieder zum Stichwort Performance Monitor
    Dort siehst du dann sogar in der Zusammenfassung ganz am Anfang welche und wieviele OPENs gemacht wurden.

    lg Andreas

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.752
    Die Aggregat-Funktion geht natürlich auch über den Index und macht auch in diesem Fall einen Index-Only-Access.
    In wie weit die MAX-Funktion eben einen absteigenden Index verwendet (optimiert ist) kann ich nicht sagen.
    Allerdings ist MAX eben so definiert, dass in einer Liste der größte Wert ermittelt werden soll.
    Und das genau tut eben SQL (siehe Visual Explain).

    Wie gesagt, mit einem explziten Zugriff per Order By auf 1 Satz sollte es auch funktionieren.

    RPG ist dann langsamer, da immer auch auf die Datenbereiche zugegriffen wird, während SQL eben nur den Index-Teil verwenden kann.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Jan 2012
    Beiträge
    1.217
    Ach, jetzt habe ich verstanden, weshalb du einen absteigenden Index haben wolltest: Du meinst, auf max() verzichten und stattdessen einen cursor öffnen und den ersten Satz lesen. Das könnte man wirklich nochmal versuchen!

    Dieter

Similar Threads

  1. RPGLE - SQL
    By christian_lettner in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 16-11-06, 11:15
  2. SQL Performance
    By mariupol1963 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 11-08-06, 14:06
  3. SQL .. for update of (RPG embedded SQL)
    By loeweadolf in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 01-06-06, 10:43
  4. Ferne SQL Analyse / Performance
    By pwrdwnsys in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 16-08-05, 09:56
  5. embedded SQL Performance Problem mit SCROLL
    By itec01 in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 16-09-04, 19:38

Berechtigungen

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