Fuerchau
27-08-04, 09:11
Gut, schauen wir uns die Details mal an:
Dein Update scheint mir da weniger ein Problem zu sein, da 3 ms doch sehr schnell ist, also ca. 333 Updates pro Sekunde möglich sind.
Dass dein Insert ca. das doppelte benötigt ist auch verständlich, da dieser nicht nur den Insert sondern auch einen Select enthält. Jeder ca. 3 ms, entspricht immer noch ca. 166 Inserts bzw. 333 Operationen pro Sekunde.
Unter der Berücksichtigung, dass für jeden SQL folgendes abläuft:
1. Die Syntax geprüft
2. Die Datei über die LIBL ermittelt werden muss
3. Jedes Feld geprüft wird, ob es a) vorhanden ist und b) der Wert zum Typ passt
4. Jede Menge interne Call's (sind auch Disk-IO, falls gepaged wurde) ablaufen
Dann finde ich das immer noch verdammt schnell !
Nun betrachte, was auf deinem System noch so läuft:
Wieviele Job's sind gleichzeitig aktiv ?
Wievele Updates/Inserts laufen in diesen noch parallel ?
Dass der einzelne Job da RELATIV lange benötigt, heißt nicht, dass dieser ein Engpass ist !!!
Zur weiteren Analyse schau mal über WRKACTJOB mit F11 auf die Sicht "Abgelaufene Daten". In der Spalte "AuxIO" kannst du über den Messzeitraum (zwischen F10 und F5 ergibt oben die abgelaufene Zeit) sehen, wieviele IO's pro Job gelaufen sind.
Mit F16 kannst du die Spalte sortieren, so dass die größten Werte oben stehen.
Bei mir sehe ich z.B., dass ein Batchprogramm gerade 13000 IO's in einer Minute erzeugt.
Dann betrachte per WRKSYSSTS die Gesamtbelastung:
In den DB/Nicht-DB-Spalten siehst du die Anzahl IO's pro Sekunde mit jeweils 4KB (1 Block).
DB-Seiten sind Datenbankobjekte (PF's, LF's, usw.)
Nicht-DB-Seiten sind z.B. Programmobjekte.
Spalte "fehl." sind Seiten (4K), die aus dem Pool verdrängt und neu gelesen werden
Spalte "geles" sind Seiten (4K), die noch nicht im Pool waren.
Wenn das noch nicht ausreicht, schau auch noch WRKDSKSTS nach.
Zu jeder Spalte gibt es eine Hilfe-Beschreibung (ALT-F1).
Wer jetzt noch behauptet, dass 3ms für Update und 6 ms für Insert langsam sind, der sollte sich mal die Plattenphysik anschauen.
Durchschnittliche Zugriffszeit beträgt pro Platte immer ca. 9-11 ms (je nach Plattentyp).
Die Anzahl der Platten im System und nicht die Größe der Platten ist entscheidend !
Da es nun 8, 16 und auch nun auch 32GB-Platten gibt ist (was Disk-IO angeht) ein System mit 8 * 16GB mit 11ms schneller als mit 4 * 32GB mit 9ms (oder heute PC's mit 120, 160 oder gar 200GB).
Es stehen einfach mehr parallele Zugriffsarme zur Verfügung !
Ganz krass hatte ich einen Kunden, der früher mit 10 * 6GB nun mit 2 * 32GB über Disk-IO-Engpässe stöhnt. Dies ist nur mit mehr Platten oder extrem vergrößertem Hauptspeicher wieder zu beschleunigen, dass ist aber zu teuer, nun stöhnt er lieber.
Dein Update scheint mir da weniger ein Problem zu sein, da 3 ms doch sehr schnell ist, also ca. 333 Updates pro Sekunde möglich sind.
Dass dein Insert ca. das doppelte benötigt ist auch verständlich, da dieser nicht nur den Insert sondern auch einen Select enthält. Jeder ca. 3 ms, entspricht immer noch ca. 166 Inserts bzw. 333 Operationen pro Sekunde.
Unter der Berücksichtigung, dass für jeden SQL folgendes abläuft:
1. Die Syntax geprüft
2. Die Datei über die LIBL ermittelt werden muss
3. Jedes Feld geprüft wird, ob es a) vorhanden ist und b) der Wert zum Typ passt
4. Jede Menge interne Call's (sind auch Disk-IO, falls gepaged wurde) ablaufen
Dann finde ich das immer noch verdammt schnell !
Nun betrachte, was auf deinem System noch so läuft:
Wieviele Job's sind gleichzeitig aktiv ?
Wievele Updates/Inserts laufen in diesen noch parallel ?
Dass der einzelne Job da RELATIV lange benötigt, heißt nicht, dass dieser ein Engpass ist !!!
Zur weiteren Analyse schau mal über WRKACTJOB mit F11 auf die Sicht "Abgelaufene Daten". In der Spalte "AuxIO" kannst du über den Messzeitraum (zwischen F10 und F5 ergibt oben die abgelaufene Zeit) sehen, wieviele IO's pro Job gelaufen sind.
Mit F16 kannst du die Spalte sortieren, so dass die größten Werte oben stehen.
Bei mir sehe ich z.B., dass ein Batchprogramm gerade 13000 IO's in einer Minute erzeugt.
Dann betrachte per WRKSYSSTS die Gesamtbelastung:
In den DB/Nicht-DB-Spalten siehst du die Anzahl IO's pro Sekunde mit jeweils 4KB (1 Block).
DB-Seiten sind Datenbankobjekte (PF's, LF's, usw.)
Nicht-DB-Seiten sind z.B. Programmobjekte.
Spalte "fehl." sind Seiten (4K), die aus dem Pool verdrängt und neu gelesen werden
Spalte "geles" sind Seiten (4K), die noch nicht im Pool waren.
Wenn das noch nicht ausreicht, schau auch noch WRKDSKSTS nach.
Zu jeder Spalte gibt es eine Hilfe-Beschreibung (ALT-F1).
Wer jetzt noch behauptet, dass 3ms für Update und 6 ms für Insert langsam sind, der sollte sich mal die Plattenphysik anschauen.
Durchschnittliche Zugriffszeit beträgt pro Platte immer ca. 9-11 ms (je nach Plattentyp).
Die Anzahl der Platten im System und nicht die Größe der Platten ist entscheidend !
Da es nun 8, 16 und auch nun auch 32GB-Platten gibt ist (was Disk-IO angeht) ein System mit 8 * 16GB mit 11ms schneller als mit 4 * 32GB mit 9ms (oder heute PC's mit 120, 160 oder gar 200GB).
Es stehen einfach mehr parallele Zugriffsarme zur Verfügung !
Ganz krass hatte ich einen Kunden, der früher mit 10 * 6GB nun mit 2 * 32GB über Disk-IO-Engpässe stöhnt. Dies ist nur mit mehr Platten oder extrem vergrößertem Hauptspeicher wieder zu beschleunigen, dass ist aber zu teuer, nun stöhnt er lieber.