Hallo,

ich muss mich doch mal bei euch einmischen.
Also, die packages haben mit den ODPs erstmal eher nix zu tun, sondern mit den Zugriffsplänen. Im ODBC und auch JDBC Bereich hat man es zunächst mal mit fully dynamic SQL zu tun, das heisst, das DBMS (Datenbank Management System) muss erst mal einen Zugriffsplan dynamisch ermitteln - und das kostet Zeit - bevor es die Abfrage ausführen kann.
Am anderen Ende hat man dann static SQL, wie es bei embedded SQL häufig vorkommt; hierbei liegt zur Compile Time bereits fest, welcher Zugriffsplan erforderlich ist und der wird in einem Package gespeichert (im lokalen Fall Teil des Programm Objektes, im verteilten Fall ein extra Package auf dem Server).
Dazwischen gibt es dann noch zwei Fälle, nämlich prepared Statements und dynamic package Support.
Prepared Statements erlauben es mit Hilfe von Parameter Markers einen Zugriffsplan Programm gesteuert wieder zu verwenden: sprich einmal preparen (= Ermittlung des Zugriffsplans) und mehrfach auszuführen.
Dynamic Package Support gibt es nur auf der AS400 und dort nur für ODBC und JDBC. Diese Packages versucht ds System dann als eine Art cache zu verwenden, in dem es sich Zugriffspläne merkt; dabei versucht das DBMS die Anforderungen zu generalisieren, sprich prepared Statements aus der Anfrage abzuleiten. Der Effekt des Ganzen hängt davon ab, welche Trefferquote solch ein cache hat und wie komplex die Ermittlung des Zugriffspfades ist.
Völlig unabhängig hiervon werden alle ODPs im Grundsatz offen gehalten, selbst wenn sie aus der Anwendung geschlossen werden (lazy close).
Im Problemfall beginne ich immer mit zwei Dingen:

- Untersuchung der Packages (PRTSQLINF)
- Untersuchung mit DataBase Monitor, was denn nun eigentlich solange dauert

Performance Optimierung ist keine Kunst, sondern Handwerk und erfordert eine solide Messtechnische Grundlage!!!

Zu den stored Procedures ist noch zu sagen: Diese haben als (aus Sicht der Datenbank) lokale Programme ein integriertes Package am Programm Objekt kleben und können sowohl statisches SQL, als auch dynamisches SQL mit Prepared Statements nutzen und sollten beim Erstaufruf (bezogen auf den Serverjob!!!) im Vorteil sein.

Zu den zeitlichen Grössenordnungen: die Ermittlung eines Zugriffspfades dauert normalerweise wenige Zehntelsekunden, das heisst: alles was über eine Sekunde liegt, hat damit nichts zu tun, sondern da fehlt in aller Regel ein Zugriffspfad, oder der Server ist überlastet und dreht Kreischen.

Dieter Bender