Zitat Zitat von andreaspr@aon.at Beitrag anzeigen
Deshalb war mein Vorschlag die Commitsteuerung übergreifend zu aktivieren und das ATOMIC weg lassen.

Wenn ich mit Commit um ein vielfaches schneller bin, ist die Bilanz auch im Falle eines ROLLBACK immer noch weit im grünen Bereich.


So ist es!

Gerade wenn es um Performance geht, ist Commit ein wichtiger Bestandteil der leider viel zu oft unterschätzt wird.

Der Insert-Trigger, um den es hier geht, ist ohne ATOMIC definiert. (siehe Beitrag auf Seite 2)
Das die IBM i bei Commit direkt auf die Platte schreibt, glaub ich nicht. Soweit ich weiss entscheidet das System selbst, in welchen Blöcken, die Daten auf die Platte schreibt, es sei denn ich leite ein kontroliertes Ende ein. Wenn ich ohne Commit-Steuerung arbeite werden alle Änderungen (auch nur im Speicher) geschrieben. Dann als letztes wird die Änderung auf die Platte geschoben.
So, wieder abgeschweift, was ich sagen will ist, wenn die Systemeinstellungen stimmen entscheidet das System über den Plattenzugriff, egal ob mit oder ohne Commit. Da ich auf unserm Testsystem diese Trigger teste, läuft auf diesem System fast nichts anderes. Sie Satzlänge beträgt 130 Byte. 64GB Arbeitsspeicher sind im System. Datentechnisch reden wir bei 6,2 Mio Sätzen von unter 1GB. Somit sollte die IBM i alles im Speicher abfackeln und dann auf die Platte auslagern. Wir reden hier schließlich nicht über PC's, die beim Abruppten beenden alles verlieren, selbst wenn ich das System zwinge sich sofort zu beenden, wird der Speicherzustand noch auf die Platte geschrieben. Somit geht auch in diesem Fall so gut wie nie etwas verloren.

Als RPG-Entwickler weiß ich, dass ein Programm, das unter Commitment-Control läuft die Daten, egal wie viele es sind, erst festgeschriebt, wenn ich den Commit abfeuer. Beende ich das Programm vorher und starte es dann wieder, meckert das System, dass noch nicht festgeschriebene Sätze anstehen. Man muss erst ein Rollback abfeuern um die undefinierten Änderungen zu verwerfen.

SQL arbeitet zwar beim Commit in Blöcken, aber deshalb steuert man nicht, dass das Ergebnis auf die Platte geschrieben wird. Für das System ist Arbeitsspeicher und Platte ein Speicher.
Warum sollte IBM an diesem System, von dem Prinziep abweichen, das macht das System doch von jeher aus.