Kann man PL/SQL optimieren?

Ich beschäftige mich gerade mit PL/SQL Routinen und stelle mir die Frage, inwiefern man diese Funktionen optimieren kann. Beim Optimieren geht es mir weniger um SQL Statements als vielmehr den PL/SQL Programmcode. Beispielsweise habe ich eine Option NOCOPY für (OUT/IN OUT) Parameter gefunden, die Werte by Reference übergibt.
Auf welche weiteren Dinge sollte man tunlichst achten, um die CPU Nutzung seitens der Datenbank möglichst gering zu halten? Gibt es Konstrukte, die man tunlichst vermeiden sollte?
Ich habe einen kleinen Satz von Funktionen/Procedures, die wiederholt schnell aufgerufen werden. Muss man hier etwa beachten?
Gibt es Besonderheiten von SQL-Code in PL/SQL Routinen, etwa was Caching oder mehrfache Ausführung angeht?
Ich bin für jeden Tipp dankbar!

Gruß Markus

Ja man kann alles optimieren. Dazu sollte man aber erst mal wissen, was zeitkritisch ist und wo man optimierungsbedarf hat.

Schau doch mal in die beiden aktuellen Bücher von Thomas Kyte rein. Expert Oracle One-onone und Effective Oracle by Design.

Viele Grüße

Peter

Ja man kann alles optimieren. Dazu sollte man aber erst mal
wissen, was zeitkritisch ist und wo man optimierungsbedarf
hat.

Schau doch mal in die beiden aktuellen Bücher von Thomas Kyte
rein. Expert Oracle One-onone und Effective Oracle by Design.

Ich hatte mir konkretere Hinweise auf häufig gemachte Fehler erhofft.
In meinem Package werden 5 Procedures aufgerufen, dabei werden 2-3 SELECT Abfragen abgesetzt. Interessanterweise pendelt sich eine Session bei 250 Aufrufen/je Sekunde bei 12-15% CPU Last ein. Im Vergleich dazu benötigt ein Direkt abgesetztes INSERT Statement (60 mal je Sekunde abgesetzt), bei gut 1% CPU Last. Somit erscheint mir die Verwendung von PL/SQL sehr CPU-intensiv zu sein. Da beide Schleifen per anonymous PL/SQL Block direkt auf dem Server ausgeführt werden, hätte ich nicht gedacht, dass die Ausführung so CPU intensiv ist.

Daher habe ich mir jetzt erst einmal Statistiken von Oracle erstellen lassen, die muss ich morgen auswerten. Zudem erhoffe ich mir von DBMS_PROFILER weitere Erkenntnisse…

Gruß Markus

Du solltest dir mal die selects ansehen. und auch die festplattenzugriffe. siehst du am besten am server direkt. am besten tust du der db meist dann, wenn du die richtigen indexe spendierst. wenn das klappt, merkst du das gleich. wenn sie nix bringen, kannst du sie ja wieder weglöschen. analyze tables hast du ja sicher schon gemacht.

an sich ist das pl/sql schon ziemlich performant. vermute also stark, es liegt an den abfragen.

ausserdem solltest du auch mal nen blick auf die speicherbelegung werfen. vielleicht kannst du da noch was optimieren. und du kannst die wichtigsten tabellen mit keep im speicher halten und die, die eh zu groß sind sofort wieder rausschmeissen.

Gruß

Peter

PS: Die Bücher, die ich empfohlen habe, sind wirklich gut. Thomas Kyte ist asktom.oracle.com.

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

EMPFEHLUNG: asktom.oracle.com & Bücher v. Tom Kyte

PS: Die Bücher, die ich empfohlen habe, sind wirklich gut.
Thomas Kyte ist asktom.oracle.com.

Dem kann man nur beipflichten! Wenn es einen Menschen gibt, der Oracle wirklich versteht, dann ist das Thomas Kyte. Die Bücher sind zwar nicht gerade eine Unterhaltungslektüre, aber doch recht interessant zu lesen (man glaubt gar nicht WAS man alles falsch machen kann :wink:).

Liebe Grüße
Martin

Danke!
Die Rezensionen beider Bücher (Amazon) sprechen für sich. Ich habe beide bestellt, jetzt heisst es erst einmal abwarten :o)

Danke für den Tipp!

Gruß Markus