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

Hybrid View

  1. #1
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Zitat Zitat von Frankk Beitrag anzeigen
    Hallo,

    Die Frage ist:
    Warum bekommt er Anfangs ein Timeout und später geht es wieder? Zur Information: Die i5 wird frühmorgens nach erfolgter Datensicherung durchgestartet. Offensichtlich dadurch bedingt tritt das Problem immer wieder nur morgens auf. Release ist V7R3M0 mit aktuellem PTF Stand.
    Die Frage ist, warum startet Ihr die Maschine immer neu? Ist ja kein Windows ;-)

    GG 4132

  2. #2
    Registriert seit
    Sep 2018
    Beiträge
    94
    Hallo Brigitta,
    danke für Deine sehr ausführliche Antwort. Tatsache ist, wenn ich den Job mir anschaue und die geöffneten Dateien mir näher anschaue, arbeitet der sehr an unserer Lagerbuchungsdatei (2,5 Mio. Datensätze). Ich habe daraufhin mir eine logische Datei gebaut (welche auch permanent in unserer Datenbibliothek angelegt ist), die die Datensätze vorselektiert. Von den 2,5 Mio. bleiben dann noch ca. 11000 übrig. Dennoch, obwohl wir auf diese logische Datei losgehen, arbeitet er immer wieder bis zum timeout an der logischen Datei. Mir scheint, dass ihn diese logische nicht gefällt und er im Hintergrund doch auf die Originaldatei geht und sich eine temporäre Sicht davon "bastelt".

    ...oder wie kann ich diese temp. Idices permanent anlegen?

    Frank

  3. #3
    Registriert seit
    Sep 2018
    Beiträge
    94
    Hallo,

    klar wäre es eigentlich nicht notwendig täglich die Maschine neu durchzustarten. Einmal pro Woche würde auch genügen. Nur: Dann hätte ich das Problem am darauffolgenden Montag auch. Auch klar: Die Probleme würden sich dann deutlich reduzieren.

    An dieser Schraube könnte man dann auch drehen!

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    Also der Fehler SQL0666 ist so alt wie man mit SQL auf die AS/400 und nun IBM i zugreifen kann.
    Der Optimizer schätzt eben die Zeit, die die Ausführung des SQL's wahrscheinlich dauern wird.
    Zwar hat sich da immer mal wieder was getan, allerdings liegt der Optimizer leider auch häufig daneben.

    Eine View (mit where) über die Tabelle zu bauen bringt für den Optimizer rein gar nichts.
    Es wird immer über die Table selektiert und der SQL ggf. mit der Where.-Klausel aus der View ergänzt.
    Die View hat außer für Schreibfaule aus SQL-Sicht keine Bedeutung.

    Anders sieht es mit einem Index aus.
    Mit dem neuen Optimizer (V6 oder erst V7) wird ein Index mit Where-Klausel (unsere gute alte LF mit Select/Omit) verwendet, wenn die where-klausel des SQL's mit dem des Index übereinstimmt.
    Aber Achtung: wirklich ein Index und keine LF.

    Trotz aller Indizierungen wird halt gerne der Fehler gemacht, bei den Where-und Join-Bedingungen nicht auf die korrekt Typisierung zu achten.
    Da reicht schon ein Unterschied mit gepackt zu zoned, ins besonders bei unterschiedlichen Längen.
    Hier hilft dann auch schon mal ein "cast(fromfield as totype)" um dem Optimizer zu helfen, den korrekten Index zu finden.
    Ansonsten wird halt gerne ein Tablescan angewandt. Und wenn dann die Anzahl Zugriffe die Abfragezeit verlängert gibts halt einen SQL0666.
    Das selbe gilt immer wieder für fehlende Indizes die zur gwünschten Where-Klausel passen müssen.
    Hierbei kann man sich auch nicht immer auf die vorgeschlagenen Indizes verlassen.
    Wenn man diese dann anlegt nimmt SQL sie dann doch nicht.

    Mit unserer BI-Anwendung wird häufig per selbstgestricktem SQL vom Kunden auf die IBM i zugegriffen.
    Hier beobachte ich das dann häufig, dass z.B. das Joblog gerne mit 1000den Meldung vollgeschrieben wird, dass eine Typanpassung erforderlich ist. Wenn dann auch noch alle paar Sekunden 1 Joblog mit 4000 Seiten erstellt wird, gibts auch schon mal eine 98%-Platte-Voll-Warnung.

    Um dem SQL0666 aus dem Weg zu gehen, wird dann aus ODBC-Sicht gerne der Timeout auf 3600 oder schon mal 32000 Sekunden gesetzt obwohl der SQL dann tatsächlich in erheblich kürzerer Zeit ausgeführt wird.
    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

  5. #5
    Registriert seit
    Sep 2018
    Beiträge
    94
    Hallo,
    ich habe mir nun gleich mal einen Index gebastelt. mit create index .... hat auch soweit funktioniert. Jetzt bringt mir mein strsql auf der i5 (wenn ich auf die Datei einen select mache) den Hinweis:

    SQL7011 xxx in yyy keine Tabelle, Sicht oder physische Datei.

    Verstehe ich da was falsch? Mit wrkobj bringt er: Art: *file Attribut: LF

    Das erzeugen des Indexes ging rasend schnell.

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    Du machst den Select immer auf die Tabelle oder View.
    Der zu verwendende Index wird von SQL selber ermittelt.
    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

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.877
    Wenn Du dem Optimizer eine logische Datei angibst, dann interessiert ihn das relativ wenig.
    Das SQL-Statement wird im Untergrund umgeschrieben. Dabei nimmt der Optimizer aus der DDS Beschreibung lediglich die Feld-Auswah, Join-Anweisungen und Select/Omit-Anweisugen, und schreibt das SQL Statement basierend auf diesen Informationen um. Der Schlüssel der logischen ist an dieser Stelle schnutzpiepegal. Die logische Datei wird wie eine View (immer ungeschlüsselt!) behandelt. Die eigentliche Optionierung beginnt erst nach dem Umschreiben. Zu diesem Zeitpunkt ist nicht mehr bekannt, dass eine logische Datei mit einem Schlüssel vorgegeben war. Wird die logische Datei genommen, ist es nichts weiter als Zufall.

    Indices werden von dem Optimizer verwendet um schnell auf die Daten zugreifen zu können.
    Übrigens mit SQL kann man einen Index nicht direkt ansprechen, aber man kann einen Index mit Native I/O (in RPG und COBOL) wie eine beliebige Datei (F-Bestimmungen / Chain / SetLL / Read ...) verarbeiten.

    Um Dein Statement zu optimieren, müsste man
    a) das Statement zunächst einmal sehen auch hier können Probleme liegen, dergestalt, dass SQL zwar die Sätze findet, jedoch keinen Index verwenden kann.
    b) die vorhandenen Zugriffswege kennen
    c) die Daten bzw. Datenzusammensetzung kennen um zu entscheiden, ob und welcher Index erforderlich ist.

    Birgitta
    Birgitta Hauser

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

  8. #8
    Registriert seit
    Feb 2001
    Beiträge
    20.254
    Seit ca. V7R2 (bzw. Create Index ... where ...) kann der Optimizer auch LF's mit Select/Omit finden und verwenden.
    Wie oben gesagt, die Where-Klausel muss exact stimmen.
    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

  9. #9
    Registriert seit
    Jul 2001
    Beiträge
    2.646
    Zitat Zitat von Frankk Beitrag anzeigen
    Hallo,

    klar wäre es eigentlich nicht notwendig täglich die Maschine neu durchzustarten. Einmal pro Woche würde auch genügen. Nur: Dann hätte ich das Problem am darauffolgenden Montag auch.
    Wenn der temporäre Speicher nicht zu sehr versaut und voll gemüllt wird, reicht auch einmal im Jahr. Denn mit dem IPL geht alles verloren, was im RAM liegt und vielleicht dem schnelleren Zugriff dienen kann. Und sei es nur ein kleiner Hinweis auf eine Verwendung von Zugriffspfaden.
    www.RZKH.de
    IBM Champion 2022, 2023, 2024
    IBM i Community Advocate https://www.youracclaim.com/badges/6...c-7ad4ba147af6
    Common / CEAC
    http://pub400.com

  10. #10
    Registriert seit
    Oct 2013
    Beiträge
    171
    Die aktuelle best practice sollte doch eigentlich IPL 4x jährlich sein - wenn man die cum. PTFs eingespielt hat, oder?

  11. #11
    Registriert seit
    Aug 2006
    Beiträge
    2.077
    Alternativ könnte er ja nach einem IPL ein SQL-Job mit der Abfrage laufen lassen. Das am besten 2mal hintereinander im 5 Minuten Abstand dann sind die Zugriffspfade wieder da.

    Und dann hat man genügend Zeit zu analysieren wie es zu verbessern geht.

    GG 4125

  12. #12
    Registriert seit
    Sep 2018
    Beiträge
    94
    Das klingt gut! Werde ich beim nächsten "Riesen-SQL" machen! Danke für den Hinweis mit dem IPL und Abfrage laufen lassen.

    An alle nochmals ein herzliches Dankeschön für eure Hilfe! Einige Aspekte (mit der LF beispielsweise) kannte ich so noch nicht!

    Wir haben unsere Anwendung aktuell nochmals überarbeitet und sind zu einer Storedprocedure (was auch durchaus performant ist) übergegangen.

Similar Threads

  1. Webservice per SQL abfragen
    By KM in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 04-11-22, 06:41
  2. Mit JSON_TABLE Array abfragen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 05-11-19, 15:35
  3. Java via QSH - ENDJOB abfragen
    By alex.kretschmer in forum NEWSboard Java
    Antworten: 6
    Letzter Beitrag: 29-09-16, 11:22
  4. UDP Socket timeout
    By max40 in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 27-01-16, 11:58
  5. OVRDBF in CL-PGM abfragen
    By Amalie in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 23-11-01, 08:37

Tags for this Thread

Berechtigungen

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