-
 Zitat von andreaspr@aon.at
...sondern analysiere warum es langsam ist ...schlechte struktur des SQL Statements... konnte ich eine Performance steigerung durchführen nachdem ich die Struktur des SQLs geändert habe.
... wieder einer der Mythen: für SQL gilt das Kohl Prinzip (wer den Dicken nicht kennt: entscheidend ist, was hinten rauskommt!). Wenn ein SQL Statement durch Umformulierung schneller wird, hat der Query Optimizer einen Bug!
-
Was bei Inserts nicht zu verachten ist sind die Anzahl zu verwaltender indizes.
Man kann diese ggf. deaktivieren und hinterher aktivieren.
in Summe ist der (partielle) Neuaufbau von Indizes über mehrere parallele Jobs schneller als die Inserts mit aktiven Indizes (gemeinsame Erfahrungen mit D*B).
-
Ich habe nun den Aufwand betrieben und aus dem Pgm mit
do *hival
qrcvdtaq
Update Datei set w1=:a, w2 = :b, w3=:c where key1=:key1 and key2 = :key2
9 *mal auf verschiedene Dateien mit 5.000-18.000.000 Sätzen
enddo
ein Pgm mit 9 mal
Setll
read
dow not %eof
eval
update
read
enddo
zu machen
das SQL schaffte im schnitt 2.200 Dataq Sätze in der Stunde
Native schafft 60.000
Blamabel!
Fazit: (wie D*B schon erwähnte)
Sql ist leichter und schneller programmiert, aber definitiv NICHT für alles geeignet
Der
ILEMax
-
Blamabel ist das eher nicht sondern hier fehlt die Analyse warum dein SQL so langsam ist.
Ggf. machte dein SQL einen tablescan weil dein Index für RPG einen Select/Omit enthält und dieser deshalb nicht verwendet wird.
Ein Faktor 30 ist da eher inwahrscheinlich. Ein Faktor nahe 1,1-1,2 sollte erreichbar sein.
-
Ich gebe zu, das ich das nicht untersucht habe.
außer der strdbg - weg hab ich da nicht soviel Kenntnisse.
Sicher ist, das auf den gekeyten PF max. 2 LF liegen, kein LF mit select / Ommit ist und
es für jede Datei einen passenden Key gibt.
Dieser ist jedoch i.d.r. länger (mehr als meine 2-4 Key Felder)
-
 Zitat von ILEMax
Ich gebe zu, das ich das nicht untersucht habe.
außer der strdbg - weg hab ich da nicht soviel Kenntnisse.
Welches Release habt ihr?
Hast du aus dem Joblog heraus sehen können ob der entsprechende Index genommen wurde?
Hat er den ODP wiederverwendet?
Wenn du ein DB Monitoring startest kannst du da viel mehr informationen herauslesen.
-
7.1 nahezu alle PTF
ODP wurde wiederverwendet, das stand so im Joblog.
Ob er die Indexe genommen hat weis ich nicht, ich hab's ja nicht weiter untersucht.
Wenn du ein DB Monitoring startest kannst du da viel mehr informationen herauslesen.
Da müßte mich mal einer für ne halbe Stunde an die Hand nehmen.
Jede Menge Halbwissen und eine gehörige Portion Unsicherheit in verbindung mit ständigem Zeitdruck
sorgen dafür, das ich da bisher nicht ran gegangen bin.
-
Es gibt ja Möglichkeiten externe Schulungen zu besuchen oder auch Angebote für Inhouse Schulungen anzufordern.
Hier im Forum sind auch einige die dir das Anbieten können.
Je nachdem wo du dich befindest könnten auch 1 Tages Inhouse Schulungen kostengünstig gemacht werden.
Ich z.B. betreibe hauptsächlich Inhouse Schulungen beim Kunden.
Bei Birgitta kannst du auch bei externe Schulungen teilnehmen.
Wie mal ein Finanzexperte gesagt hat:
"Die besten und sichersten Investitionen sind die Ich-Investitionen" (also investieren in Ausbildung)
-
 Zitat von ILEMax
das SQL schaffte im schnitt 2.200 Dataq Sätze in der Stunde
Native schafft 60.000
> 1 sec pro Eintrag und Faktor 27, da sollte man erst mal nachsehen, wo die Zeit bleibt.
16/sec für native, da stellt sich auch schon die Frage, wo da die Zeit bleibt - wie viele Datenbankoperationen stehen dahinter? Auch da ist durchaus Optimierungspotential zu vermuten; am Ende könnte eine SQL Lösung da schneller sein!!!
D*B
-
Ich fürchte das ich mich wiederhole
Es sind 9 Dateien.
3 kleine mit bis zu 5000 Sätzen,
6 große mit 1.000.000 - 15.000.000 Sätzen.
Der update findet minimum 0 maximum ca 150 Sätze.
Schätze im Schnitt 40-50 (in den großen Dateien)
So sehen ALLE 9 SQL Befehle aus
/EXEC SQL
+ UPDATE $FOTIP2 SET $AWKAR = 'D', $ADNEW=:HEUTE, $ATNEW=:JETZT
+ WHERE $AKEY8 = :N7A AND $AKEYE = :N1
/END-EXEC
Key der Datei: $akey8 und $akeye und (hier) 3 weitere Felder
(:heute und :jetzt = Numerisch 8 und 6, Datum jjjjmmtt und Zeit hhmmss, auch in der Datei)
Wie kannst du das optimieren?
Der ILEMax
-
Die Frage ist, was der Optimzer dazu im Joblog (unter Debug) zu meckern hat.
Ob die Variablen in der Ausprägung zum Schlüssel passen....
-
 Zitat von ILEMax
Ich fürchte das ich mich wiederhole
Es sind 9 Dateien.
3 kleine mit bis zu 5000 Sätzen,
6 große mit 1.000.000 - 15.000.000 Sätzen.
Der update findet minimum 0 maximum ca 150 Sätze.
Schätze im Schnitt 40-50 (in den großen Dateien)
So sehen ALLE 9 SQL Befehle aus
/EXEC SQL
+ UPDATE $FOTIP2 SET $AWKAR = 'D', $ADNEW=:HEUTE, $ATNEW=:JETZT
+ WHERE $AKEY8 = :N7A AND $AKEYE = :N1
/END-EXEC
Key der Datei: $akey8 und $akeye und (hier) 3 weitere Felder
(:heute und :jetzt = Numerisch 8 und 6, Datum jjjjmmtt und Zeit hhmmss, auch in der Datei)
Wie kannst du das optimieren?
Der ILEMax
... vielleicht bin ich ja begriffsstutzig, 60.000 * 50 reads plus die gleiche Menge updates in der Stunde, das sind pro sec. 1666 elementare db Operationen, für RLA auch kein berauschender Wert, aber noch plausibel.
Wenn ich dasselbe in der gleichen Logik mit SQL mache, sprich: lesen mit cursor und update per current of cursor, dann wäre für mich 1 millisekunde pro elementare Operation grenzwertig (:= net schnell, aber kein Handlungsbedarf, falls Durchsatz ausreichend). Macht man dasselbe per Bulkoperation, also 50 updates mit einem SQL Statement (so verstehe ich das, was Du da machst), dann sollte SQL schneller sein.
Wenn es dann aber um den Faktor 27 langsamer ist, dann besteht da ein hebbares Problem, von der Art fehlender Index oder vermeidbarer cast - in jedem Fall sollte da bereits STRDBG vorher und ein Blick in das Joblog ausreichend Info liefern.
Ganz unabhängig davon, könnte man den Durchsatz mit SQL, durch Parallelisierung der Anforderungen, deutlich über den RLA Wert steigern können (es sei denn die Maschine pfeift auf dem letzten Loch).
D*B
PS: falls die keys für die where clause aus der DataQ kommen, könnte man eventuell sogar mehrere SQLs zu einem (mit where in subselect) zusammenfassen. Auch das hat einiges Potential. Das wichtigste ist allerdings die Index Frage; da könnte es schon helfen, wenn Du mal das Joblog eines exemplarischen Zugriffs hier einstellst.
D*B
Similar Threads
-
By msost in forum NEWSboard Programmierung
Antworten: 9
Letzter Beitrag: 25-07-14, 15:54
-
By Gimli in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 10-03-03, 13:08
-
By Peter Kosel in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 18-10-01, 13:49
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks