ja, ja der open close. Richtig ist erstmal, dass SQL möglichst lazy closes macht (sprich es setzt einen Merker, dass das Programm close gesagt hat, wenn dann der open kommt, sagt sich SQL, das habe ich mir doch gleich gedacht, positioniert den Cursor neu und macht den Merker weg. Das ist von Vorteil, solange die Query Engine keinen Schuss hat: sprich: die Zuordnung korrekt findet und nicht den einen nur logisch schließt und einen neuen aufmacht! (in diesem Fall hilft dann ein PTF).
Beeinflussen kann man das eigentlich nur durch einen disconnect von der Datenbank mit folgendem neuem Connect, der sollte die Ressourcen wirklich freigeben, aber selbst da bin ich mir bei neueren Releases (sprich SQE) nicht immer sicher.
Die Einstellungen von CLOSQLCSR wirken nach meiner Erfahrung (die auch von der Doku gestützt wird (IBM Software Technical Document 6492409 Herr Google hilft beim suchen) nicht auf die ODPs, sondern machen im Grunde dasselbe, wie ein close im SQL, bei korrektem Design der Anwendung ist das ohne jede Auswirkung, da dann die erforderlichen open close Anweisungen aus dem Programm kommen und das Transaktions steuernde Programm das in der Hand hat - nach ANSI Standard ohne DB2 Erweiterungen impliziert das Transaktions Ende (Commit/Rollback) das schließen der Cursor und die Freigabe der Ressourcen.
Am Rande sei hier noch vermerkt, dass Objektsperren durch ODPs, deren Cursor im Status closed sind beim ALCOBJ über den Parameter RQSRLS geholt werden können, was SQL beim Sperren anfordern immer automatisch macht.
Was den Einfluss auf die Performace angeht:
- in der Summe wird durch die lazy close Startegie von SQL Zeit eingespart
- wenn ein full open mehr als centi (1/100) Sekunden benötigt, fehlt meist ein Index
- in wenigen Fällen kann ein vorhandener ODP von Übel sein, weil eine ältere Zugriffs Strategie beibehalten wird, obwohl mittlerweile eine andere besser wäre
Empfehlung: diesen Parameter auf default Einstellung belassen, wenn man mit Commit Scope *ACTGRP arbeitet und wenn man mit Commit Scope *JOB arbeitet auf diese Ebene anpassen.

D*B


D*B

Zitat Zitat von B.Hauser Beitrag anzeigen
Wenn Du Dein Programm mit Unterlassungswerten umgewandelt hast (wovon ich ausgehe) bleibt der ODP geöffnet, bis die Aktivierungsgruppe, in der das Programm oder die Prozedur läuft geschlossen wird.
Der ODP wird gelöscht, wenn Du in der Compile-Option CLOSQLCSR im Befehl CRTRPGSQLI *ENDMOD angibst. Dann wird der ODP jeweils beim Modul-Ende gelöscht. Bei wiederholten Aufrufen und vielen SQL-Statements kann dies zu einer wesentlich schlechteren Performance führen. Deshalb sollte diese Option nur in Ausnahmefällen geändert werden.

Birgitta