[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077

    SQL Optimierung V5R4

    Hallo *all,
    ich habe für unsere Außendienstler eine Kundendatei erstellt mit allen möglichen Informationen.
    Um die Daten zusammenzustellen habe ich div. UDFs kreiert.
    Die UDFs alleine funktionieren einwandfrei. Im Zusammenspiel geht es in die Hose.
    Das Problem ist das dann Zugriffswege erstellt werden und daher die Abfrage mit Timeout abbricht. Unter V5R4 werden sie leider ja immer wieder neu erstellt.
    Hatte jetzt mal ein strdbmon aktiviert. Ich kann aber aus der Auswertung des DBmon keine Handlungsanweisung erkennen wie ich die UDFs optimieren kann.

    Er sagt mir zwar das er den Zugriffspfad erstellt aber nicht welchen.

    Für sachdienliche Hinweise zur Ergreifung der Daten dankbar.

    GG

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das Problem ist eigentlich nur dann, wenn deine UDF's in Where/Group by/Order By oder auch in " join ... on udf(...) = ..." verwendet werden.
    Hierfür sind UDF's definitiv nicht geeignet und optimierbar.

    Müssen Ergebnisse von UDF's aber auf diese Weise verwendet werden, so kann dies nur per Trigger mit Berechnung des Ergebnisses in einem neuen Feld/anderer Datei passieren, so dass über das Ergebnis auch ein Index gelegt werden kann.

    Zugriffe innerhalb einer UDF werden auch separat optimiert.
    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

  3. #3
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Bei der zusammengefassten Übersicht vom DB Monitor solltest du auch die Anzahl der Abfragen sehen wo ein Index erstellt wurde.
    Wenn du dort die Anweisungen/Zusammenfassung öffnest und den Visual Explain öffnest, solltest du den erstellten Index finden können.
    Ansonsten könntest du über die System-View SYSPARTITIONINDEXES gehen.
    Dort kannst du dir die temporär erstellten Indice anschauen.

    lg Andreas

  4. #4
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Hallo,die UDFs sind Teil einer View, da ich ja die Daten für die externe Anwendung aufbereiten muss. Ich möchte das alles gerne per SQL erledigen bevor ich mir da ein Cobol Programm schreibe.Wenn ich Deinen Vorschlag richtig verstehe würdest Du hingehen und z.B. über ein CLP die UDFs (zumindestens die zeitkritschen) laufen lassen, die Ergebnisse davon in eine Datei schreiben und das dann auswerten.GG

  5. #5
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
    Bei der zusammengefassten Übersicht vom DB Monitor solltest du auch die Anzahl der Abfragen sehen wo ein Index erstellt wurde.Wenn du dort die Anweisungen/Zusammenfassung öffnest und den Visual Explain öffnest, solltest du den erstellten Index finden können.Ansonsten könntest du über die System-View SYSPARTITIONINDEXES gehen.Dort kannst du dir die temporär erstellten Indice anschauen.lg Andreas
    Blöde Frage (déja vu) Wie öffnest Du Visual Explain? Ich habe mir die Auswertung der Ergebnis-Datei mit Query angesehen.GG

  6. #6
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... ein Zugriffspfad mit Feldern, die eine UDF enthalten kann nur temporär by the fly aufgebaut werden. (siehe auch Baldurs Antwort)

    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/

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Zitat Zitat von KingofKning Beitrag anzeigen
    Blöde Frage (déja vu) Wie öffnest Du Visual Explain? Ich habe mir die Auswertung der Ergebnis-Datei mit Query angesehen.GG
    Im System i Navigator. Dort werden die Auswertungen hübscher dargestellt und dort gibt es auch den Visual Explain.
    Deine Verbindung --> Datenbanken --> DeineDB --> SQL Perf. Monitors --> ...

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Vielleicht kannst du die UDFs optimieren?

    Zum Beispiel, falls sie die gleichen Ergebnisse für die selben Eingabewerte liefern:

    "Use the DETERMINISTIC option on procedures and UDFs that return the same results for identical inputs. This allows the optimizer to cache the results of a function call or order where the function is called in the execution stream to reduce the run time."

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das Problem ist und bleibt die Verwendung von UDF-Ergebnissen in Where usw.
    Hier erfolgt halt immer ein Tablescan und ist deshalb nicht optimierbar.
    Deterministic hilft in diesem Fall auch nicht. Dies spart ggf. den Aufruf der UDF aber nicht den Tablescan. Wobei die Anzahl der Caches nicht unendlich ist.
    Durch die Verlagerung in eine View ist das von außen noch nicht mal sichtbar.
    Die UDF wird vor der Prüfung der restlichen Where's aufgerufen!
    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

  10. #10
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Also wenn ich sehe das die Original Datei mal gerade 72 Mio Sätze hat und der erzeugte Index dann 20.000 Einträge hat braucht der Sasck 2 Minuten 50 um den ersten Satz anzuzeigen.

    Das dumme ist das die UDF wiederum auf eine View zurückgreift.
    Das zu optimieren wird schwierig, vermutlich werde ich jeweils eine Datei erzeugen und die mit join in die Original-Datei einbinden.Nicht schön aber selten.

    GG

  11. #11
    Registriert seit
    Mar 2002
    Beiträge
    5.287
    ... was machen Deine UDFs denn überhaupt?
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    SQL verwendet keine Indizes die Einschränkungen aufweisen.
    Deine 20.000 Indexeinträge deuten auf eine Select/Omit-LF hin.
    Diese kannst du im SQL getrost vergessen!

    Besser ist hier ein Index, der die Select/Omit-Felder enthält, der ist dann verwendungsfähig.
    Die View muss dann allerdings hier die Where-Klausel enthalten.
    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

Similar Threads

  1. iSeries V5R4 Systemstart
    By roti in forum NEWSboard Server Software
    Antworten: 2
    Letzter Beitrag: 17-02-14, 11:23
  2. V5R4
    By dino in forum IBM i Hauptforum
    Antworten: 9
    Letzter Beitrag: 18-12-13, 13:59
  3. Java auf V5R4 Performance
    By TR1 in forum NEWSboard Java
    Antworten: 1
    Letzter Beitrag: 02-11-13, 14:02
  4. Optimierung SQL Anweisung
    By Cassius in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 05-03-02, 19:28
  5. AS/400 - Tuning/Optimierung
    By thomsta in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 07-02-02, 10:54

Berechtigungen

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