BenderD
17-10-14, 09:06
Auf unserem System gibt es eine LF-Datei mit folgendem Aufbau:
R RECA PFILE(FILEA)
K FeldA
K FeldB
K FeldC
K FeldD
S FeldC CMP(LE 45)
FeldD CMP(NE 'D')
R RECB PFILE(FILEB)
K FeldA
K FeldB
K FeldC
K FeldD
S FeldC CMP(Lt 60)
FeldD CMP(NE 'D')
In beiden PF's sind sehr viele Sätze enthalten.
Nun kommt es morgens beim ersten Aufruf des PGMS zu einer sehr langen Laufzeit (X-Minuten), der zweite Aufruf geht dann sehr schnell.
beide haben MAINT(*IMMED),
Nur der erste Aufruf dauert sehr lange. Die anderen von anderen Usern etc geht dann "sehr schnell".
Die LF ist auch mit Maint(*immed).
also die beiden PF haben zusammen 36 GB . Rund 40 Millionen Datensätze .
er fängt an Sätze zu lesen aber EXTREM langsam . Wie gesagt erster Aufruf dauert mehrere Minuten und dann gehts schnell . Aber ja er hat 700000 gelöschte Sätze REUSEDLT = (*YES)
Die LF durchlesen von Anfang bis Ende .
Dieses kleine PGM lief nach 7 Stunden immer noch !!!!!
Habe jetzt mal testweise den Select der ersten LF auf LT30 gestellt. Jetzt muss er (das hab ich per SQL ausgewertet) nur noch 20000 Sätze bearbeiten . Läuft beim ersten mal 25 Sekunden . Beim 2ten Aufruf im Millisekundenbereich . Wenn ich den Selcet wieder auf LE 45 stelle ,18 Millionen Sätze werden bearbeitet läuft mein Mini-Progrämmchen über 7 STD.
Geht beim ersten Aufruf Satz für Satz sehr langsam .
Ich habe mir mal die Mühe gemacht alle Beschreibungen des Phänomens zusammen zu kopieren und alle Hypothesen weggelassen. Fangen wir am Besten am Schluss an:
- für 20.000 Sätze braucht es 25 Sekunden, für 18 Millionen 7 Std. Das sind konsistent circa 1000 Sätze pro Sekunde. Das ist nicht gerade schnell, aber auch nicht absurd langsam. Je nach Hardware (Geschwindigkeit der Platten, Auslastung, konkurrierende Workload etc.) Falls die Cache Batterie kaputt ist, wäre das sogar normal.
- das Ausgangsprogramm mit SETLL und reade dauert beim ersten Aufruf Minuten, später Millisekunden. Es arbeitet mit SETLL und dann reade, liest also wohl relativ wenig Sätze. Das passt zu den Millisekunden (1000 Sätze pro Sekunde), aber nicht zu den Minuten. Da schließt sich die spannende Frage an, was macht das Programm sonst noch, bzw. wie sieht dieses Programm denn genau aus und was treibt das Programm in den Minuten? Wieviele Sätze verarbeitet das Programm bei den Minuten? Wieviele bei den Millisekunden? Woher genau kommt die Information über die Laufzeiten? Ist das reproduzierbar, wenn ja, wie?
D*B
R RECA PFILE(FILEA)
K FeldA
K FeldB
K FeldC
K FeldD
S FeldC CMP(LE 45)
FeldD CMP(NE 'D')
R RECB PFILE(FILEB)
K FeldA
K FeldB
K FeldC
K FeldD
S FeldC CMP(Lt 60)
FeldD CMP(NE 'D')
In beiden PF's sind sehr viele Sätze enthalten.
Nun kommt es morgens beim ersten Aufruf des PGMS zu einer sehr langen Laufzeit (X-Minuten), der zweite Aufruf geht dann sehr schnell.
beide haben MAINT(*IMMED),
Nur der erste Aufruf dauert sehr lange. Die anderen von anderen Usern etc geht dann "sehr schnell".
Die LF ist auch mit Maint(*immed).
also die beiden PF haben zusammen 36 GB . Rund 40 Millionen Datensätze .
er fängt an Sätze zu lesen aber EXTREM langsam . Wie gesagt erster Aufruf dauert mehrere Minuten und dann gehts schnell . Aber ja er hat 700000 gelöschte Sätze REUSEDLT = (*YES)
Die LF durchlesen von Anfang bis Ende .
Dieses kleine PGM lief nach 7 Stunden immer noch !!!!!
Habe jetzt mal testweise den Select der ersten LF auf LT30 gestellt. Jetzt muss er (das hab ich per SQL ausgewertet) nur noch 20000 Sätze bearbeiten . Läuft beim ersten mal 25 Sekunden . Beim 2ten Aufruf im Millisekundenbereich . Wenn ich den Selcet wieder auf LE 45 stelle ,18 Millionen Sätze werden bearbeitet läuft mein Mini-Progrämmchen über 7 STD.
Geht beim ersten Aufruf Satz für Satz sehr langsam .
Ich habe mir mal die Mühe gemacht alle Beschreibungen des Phänomens zusammen zu kopieren und alle Hypothesen weggelassen. Fangen wir am Besten am Schluss an:
- für 20.000 Sätze braucht es 25 Sekunden, für 18 Millionen 7 Std. Das sind konsistent circa 1000 Sätze pro Sekunde. Das ist nicht gerade schnell, aber auch nicht absurd langsam. Je nach Hardware (Geschwindigkeit der Platten, Auslastung, konkurrierende Workload etc.) Falls die Cache Batterie kaputt ist, wäre das sogar normal.
- das Ausgangsprogramm mit SETLL und reade dauert beim ersten Aufruf Minuten, später Millisekunden. Es arbeitet mit SETLL und dann reade, liest also wohl relativ wenig Sätze. Das passt zu den Millisekunden (1000 Sätze pro Sekunde), aber nicht zu den Minuten. Da schließt sich die spannende Frage an, was macht das Programm sonst noch, bzw. wie sieht dieses Programm denn genau aus und was treibt das Programm in den Minuten? Wieviele Sätze verarbeitet das Programm bei den Minuten? Wieviele bei den Millisekunden? Woher genau kommt die Information über die Laufzeiten? Ist das reproduzierbar, wenn ja, wie?
D*B