Oracle Datenbank-Tuning - Der Shared Pool

Den Shared Pool optimieren

Wenn im täglichen Sprachgebrauch von der Optimierung einer Oracle-Datenbank gesprochen wird, dann ist diese Terminologie eigentlich nicht exakt. Optimiert werden sowohl die Instanz mit ihren Hauptspeicher-Objekten als auch die Datenbank mit ihren Dateien. In diesem Artikel beschäftigen wir uns also mit der Optimierung von Instanz und Datenbank.

Der Shared Pool ist der Teil der SGA, in dem SQL- und PL/SQL-Anweisungen gespeichert werden. Er wird nach dem LRU-Prinzip (Least Recently Used) verwaltet. Wenn der Shared Pool voll ist, werden die Anweisungen hinausgeworfen, die am wenigsten benutzt wurden. Wenn ein Benutzer eine SQL- oder PL/SQL-Anweisung an die Datenbank sendet, dann werden einige Aktionen durchgeführt, bevor die Anweisung selbst ausgeführt wird.

  1. Zuerst konvertiert Oracle die Anweisung in einen numerischen Code.

  2. Danach werden die Zeichen von einem Hash-Algorithmus verarbeitet und es wird ein Hashed Value erzeugt.

  3. Der Benutzerprozess auf dem Server prüft dann, ob dieser Hashed Value bereits im Shared Pool existiert.

  4. Falls der Hashed Value existiert, verwendet der Server-Prozess diese Version und führt die Anweisung aus. Existiert der Hashed Value nicht im Shared Pool, dann führt der Server-Prozess ein Parsing durch, bevor die Anweisung ausgeführt wird. Das Parsing produziert viel Mehraufwand und kostet Zeit. Die folgenden Schritte werden beim Parsing durchgeführt:

  • Überprüfen der Anweisung auf Syntax-Fehler

  • Auflösen der Objekte und Überprüfung im Datenbankkatalog, ob diese Objekte existieren

  • Statistiken der Objekte aus dem Datenbankkatalog lesen

  • Einen Ausführungsplan bestimmen und vorbereiten

  • Überprüfen der Objektprivilegien des Benutzers

  • Erstellen einer kompilierten Version der Anweisung (P-Code)