Hallo,

nchdem ja schon einiges in den Antworten drin ist, noch ein paar Aspekte:
- addBatch ist nicht von allen Treibern gleich implementiert, da gibt es durchaus Dummies ohne jeden Effekt, darunter zumindest die älteren Versionen der Toolbox.
- addBatch ist Programm technisch komplexer (welche 3 von den 100 haben nun eigentlich nicht geklappt und warum) und von daher eher zu unterlassen.
- inserts brauchen keinen ODP
- für die Java Geschwindigkeit ist die Prozessorspeed ausschlaggebend; je nach AS400 und PC sind da Faktoren bis zu 5 völlig normal. Die Geschwindigkeit ist nur für neueste Prozessoren als vergleichbar zu erwarten, schneller ist die AS400 auch da nicht, wenn ich neueste Intel dagegen vergleiche.
- COBOL/RPG ist in dieser Art eins zu eins Benchmarks immer schneller - für wirkliche Leistungsvergleiche muss man reale Anwendungen nehmen, die alle Möglichkeiten ihrer jeweiligen Umgebung nutzen. Java nutzt dann Multithreading beim schreiben und extensives caching beim lesen, dann sieht der Vergleich völlig anders aus. Den Amazon Webshop oder die Ebay Anwendung könnte man in RPG oder COBOL nicht schreiben, das wäre zu langsam.
- es gibt nichts geschenkt auf der Welt: moderne Technologien brauchen in der EDV adäquate Hardware

Ein paar Aspekte sind auch in meiner Java-AS400 FAQ auf meinen Webseiten erläutert.

mfg

Dieter Bender

Zitat Zitat von pwrdwnsys
Hallo Forum,

nachdem ich hier schon im Forum nach dem Problem gesucht habe und immer noch nicht fündig geworden bin, hier meine Bitte um Hilfe. Das Problem ist die performance beim schreibenden JDBC Zugriff. Ich erstelle mir eine Tabelle mit

CREATE TABLE SQLTEST (FLD1 CHAR (10 ) NOT NULL WITH
DEFAULT, FLD2 CHAR (10 ) NOT NULL WITH DEFAULT)

Wenn ich jetzt mit SQL COBOL 10.000 Sätze in die Tabelle einfüge, dauert das ca. 1s. Auszug :

PERFORM WITH TEST AFTER UNTIL V-ZAEHLER > 10000
EXEC SQL
INSERT INTO SQLTEST
VALUES ("FLDA", "FLDB")
END-EXEC
ADD 1 TO V-ZAEHLER
END-PERFORM.

Mache ich dasselbe mit einem JAVA-programm, dauert das ganze 19s. Ohne Verwendung von ProparedStatements noch länger. Der Sourcecode sieht so aus :

int j = 0;
try {
PreparedStatement ps = AS400.prepareStatement("INSERT INTO sqltest VALUES(?, ?)");

for (int i = 0;i<10000;i++) {
ps.setString(1, "FLDA");
ps.setString(2, "FLDB");
ps.addBatch();
j++;
if (j==1000) {
ps.executeBatch();
j=0;
}
}
} catch (Exception ex) {
ex.printStackTrace();

}

Was läuft hier verkehrt ? Habe das Gefühl das bei jedem executBatch schon auf die Tabelle der iSeries zugegriffen und ein ODP erstellt wird. Allerdings ist die Maschine während des ganzen Vorganges nicht ausgelastet. CPU <10%, kein Paging, nichts. Version 5.2 ist im Einsatz auf einer 810. Das Problem triff aber genau so auf einer 870 mit 5.3 und einer 170 mit 5.2 auf.
Bin ratlos und für jeden Tip dankbar.