Prozessarchitektur einer Oracle-Instanz Katharina Schewzow, 05IND 3. Juni 2008 1 Inhaltsverzeichnis Inhaltsverzeichnis 1 Oracle Instanz 3 2 Die Oracle-Prozesse 5 2.1 Die Server-Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.2 Hintergrundprozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.2.1 Der Database Writer (DBWR) . . . . . . . . . . . . . . . . . . . 6 2.2.2 Der Log Writer (LGWR) . . . . . . . . . . . . . . . . . . . . . . 6 2.2.3 Der Checkpoint-Prozess (CKPT) . . . . . . . . . . . . . . . . . 6 2.2.4 Der Archiver Prozess (ARCH) . . . . . . . . . . . . . . . . . . . 7 2.2.5 Der Recoverer Prozess (RECO) . . . . . . . . . . . . . . . . . . 7 2.2.6 Der Systemmonitor Prozess (SMON) . . . . . . . . . . . . . . . 7 2.2.7 Der Prozessmonitor Prozess (PMON) . . . . . . . . . . . . . . . 7 3 System Global Area (SGA) 8 3.1 Database Buffer Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 3.2 Redo Log Buffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3 Shared Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.1 Library Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.3.2 Data Dictionary Cache . . . . . . . . . . . . . . . . . . . . . . . 11 3.4 Java Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 3.5 Large Pool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 2 1 1 Oracle Instanz Oracle Instanz Eine Oracle-Instanz ist Hauptbestandteil des Oracle Datenbank Management System (DBMS). Zu jeder Datenbank gehört mindestens eine Instanz. Sie besteht aus zwei Hauptkomponenten • der System Global Area (SGA) und • Hintergrundprozessen. Über einen Server-Prozess greifen die Client-Prozesse auf die Datenbank zu. Dieser Server-Prozess ist für das Ausführen von SQL-Queres, die Datenbereitstellung vom Externspeicher und die Rückgabe der Anfrage-Resultate an den Client zuständig. Die Hintergrundprozesse stellen die Verbindung zwischen der SGA und den Dateien der Datenbank und sind für die Transaktionsverwaltung und das Recovery zuständig. Die SGA ist eine globale Hauptspeicherstruktur. Sie besteht haupsächlich aus dem Datenbankpuffer, dem Redo-Log-Puffer und einem Cache für den Datenbankkatalog (data dictionary). Die einzelne Strukturen der System Global Area (SGA) und die auf einer OracleInstanz laufende Hintergrundprozesse werden später näher erläutert. 3 1 Oracle Instanz Abbildung 1: Prozessarchitektur von Oracle10g (Thomas Kudraß: Taschenbuch Datenbanken, 2007) 4 2 2 Die Oracle-Prozesse Die Oracle-Prozesse Die Oracle-Prozesse unterteilt man in • Server-Prozesse und • Hintergrundprozesse - Der Database Writer (DBWR) - Der Log Writer (LGWR) - Der Checkpoint-Prozess (CKPT) - Der Archiver Prozess (ARCH) - Der Recoverer Prozess (RECO) - Der Systemmonitor Prozess (SMON) - Der Prozessmonitor Prozess (PMON) 2.1 Die Server-Prozesse Für jeden Benutzer-Prozess erzeugt Oracle einen dazugehörigen Server-Prozess, über den die Kommunikation mit der Oracle-Instanz möglich wird. Die wichtigsten Aufgaben des Server-Prozesses sind: - das Parsen und Ausführen von SQL-Anfragen, - die Bereitstellung von Daten aus dem Externspeicher und - die Rückgabe der Anfrage-Resultate an den Client. 5 2 2.2 Die Oracle-Prozesse Hintergrundprozesse Jeder Hintergrundprozess ist für die Erfüllung einer bestimmter Funktion zuständig. Das Datenbanksystem funktioniert nur dann richtig, wenn alle Hintergrundprozesse fehlerfrei laufen. 2.2.1 Der Database Writer (DBWR) Der Database Writer ist für das Schreiben von Datenblöcken aus dem Buffer Cache in die Dateien der Tablespaces verantwortlich. Mit dem Initialisierungs-Parameter DB_WRITER_PROCESSES können Sie die Anzahl der DBWR-Prozesse festlegen (max. 20 Prozesse). Es gibt eine Reihe von Ereignissen, die den Database Writer zwingen, Buffer auf die Festplatte zu schreiben. Das passiert - wenn ein Server-Prozess keinen freien Buffer findet und der Schwellenwert für die Suche erreicht wird - wenn ein checkpoint ausgeführt wird - nach einem timeout von drei Sekunden 2.2.2 Der Log Writer (LGWR) Der Log Writer ist für die Verwaltung der Redo Log Buffer verantwortlich, die er in die Redo-Log-Dateien auf der Festplatte schreibt. Dies geschiet wenn: - eine Transaktion erfolgreich beendet wird - der Redo Log Buffer zu einem Drittel gefüllt ist - der DBWR Daten schreibt 2.2.3 Der Checkpoint-Prozess (CKPT) Durch den Checkpoint-Prozess werden periodisch Sicherheitspunkte angelegt, die nach einem Absturz zum Reconstruieren der Daten dienen. CKPT aktualliseiert auch die Header der Datendateien, so dass sie die Daten des CHPT festhalten. 6 2 2.2.4 Die Oracle-Prozesse Der Archiver Prozess (ARCH) Der Archiver Prozess ist ein optionaler Prozess, da er nur dann existiert, wenn die Datenbank im ARCHIVELOG-Modus betrieben wird. Die Archivierungsprozesse sichern voll geschriebene Redolog-Dateien in ein dafür konfiguriertes Verzeichnis. 2.2.5 Der Recoverer Prozess (RECO) Die Aufgabe des Recoverer Prozesses ist es die Fehler, die bei den verteilten Transaktionen auftretten, zu beheben. Die Verbindung zu einer anderen in die verteilte Transaktion eingebundene Insanz wird automatisch aufgebaut. Beim Fehlschlag der Verbindung wird diese nach einer gewissen Zeit wiederaufgebaut. 2.2.6 Der Systemmonitor Prozess (SMON) Der Systemmonitor Prozess dient hauptsächlich zur Wiederherstellung einer OracleInstanz nach dem Absturz. Außerdem werden durch SMON nicht mehr verwendete, temporäre Segmente gelöscht. SMON kontrolliert regelmäßig, ob er gebraucht wird. SMON wird auch durch andere Prozesse im Falle einer auszuführenden Aufgabe aufgerufen. 2.2.7 Der Prozessmonitor Prozess (PMON) Der Prozessmonitor Prozess überwachtdie Aktivität aller auf die Oracle-Instanz zugreifende Prozesse und und startet die, falls ein Fehler auftritt, neu. Dazu schaltet er alle Ressoursen frei, die der fehlgeschlagene Prozess benötigt hat. Gleichzeitig werden alle durch diesen Prozess angelegte Sperren freigegeben und alle nicht beendete Transaktionen zurückgesetzt. Wie SMON kontrolliert PMON regelmäßich, ob irgend-welche Aufgaben noch zu erledigen sind. 7 3 3 System Global Area (SGA) System Global Area (SGA) Der größte Teil einer Oracle-Instanz ist System Global Area. Die System Global Area setzt sich aus folgenden Strukturen zusammen: • Database Buffer Cache (Datenbankpufferspeicher) • Redo Log Buffer (Wiederherstellungsprotokollpuffer) • Shared Pool (der geteilte Speicherraum) * Library Cache * Data Dictionary Cache (Speicher für den Datenbankkatalog) • Java Pool (Javaspeicherraum) • Large Pool (der große Speicherraum) 8 3 System Global Area (SGA) Die SGA wird initialisiert und in mehrere Bereiche unterteilt, wenn die Instanz gestartet wird. Die Unterteilung und die Größe des Speicherbereiches lässt sich während die Instanz aktiv ist nicht mehr ändern. Wenn eine Änderung durchgeführt werden muss, muss man die notwendige Parameter in der Initialisierungsdatei modifizieren und die Instanz neu starten. Seit Oraacle9i gibt es die Dynamische SGA, bei der Buffer Cache, Shared Pool und Large Pool geändert werden können, ohne die Instanz neu zu starten. 9 3 3.1 System Global Area (SGA) Database Buffer Cache Im Database Buffer Cache werden die zuletzt genutzten Datenblöcke gespeichert. Falls ein für eine Anfrage benötigter Datenblock nicht im Buffer gefunden wird, wird er aus den data files gelesen und eine Kopie im Database Buffer Cache abgelegt. Der Database Buffer Cache kann von allen Prozessen einer Instanz benutzt werden. Man unterscheidet drei Buffer-Arten: • Dirty Buffer(Puffer, die geänderte Daten enthalten) • Free Buffer(Keine Daten enthaltende oder zur Überschreibung stehende Blöcke, die mit Daten von der Festplatte gefühllt werden) • Pinned Buffer(Puffer, die gerade benutzt werden) Zur Verwaltung von Buffer Cache werden zwei Listen verwendet: - Write List (Dirty Buffer List) und - LRU-Liste (Least Recently Used List). In der Write List werden alle geänderte Buffer regestriert, die noch auf die Festplatte geschrieben werden müssen. Die LRU-Liste besteht aus Dirty Buffer,Free Buffer und Pinned Buffer, die noch nicht in der Write List stehen. Von der Festplatte gelesene Daten werden am Anfang der LRU-Liste plaziert. Falls der Buffer Cache voll wird, entfernt man die am Ende der LRU-Liste stehende Datenblöcke. Mit diesem Prinzip befinden sich die oft verwendete Blöcke immer im Buffer Cache. 10 3 3.2 System Global Area (SGA) Redo Log Buffer Der Redo Log Buffer hält alle Änderungen, die mittels CREATE-, UPDATE-, INSERT-, DELETE-, DROP- und ALTER-Anweisungen gemacht wurden, für die Redo-Log-Dateien. Beim Pufferüberlauf werden die Redo-Einträge mittels des LGWR in die log files geschrieben und der Puffer wieder freigegeben. Die Größe des Redo Log Buffers lässt sich über die Konstante LOG_BUFFER bestimmen. 3.3 Shared Pool Der Shared Pool wird in zwei Bereiche unterteilt: • der Library Cache und • der Data Dictionary Cache. Der Speicher wird nach dem LRU-Verfahren verwaltet (die ältesten Einträge werden zuerst aus dem Speicher entfernt). Die Größe des Shared Pools lässt sich über die Konstante SHARED_POOL_SIZE bestimmen. 3.3.1 Library Cache Der Library Cache enthält SQL-Anweisungen, PL/SQL-Prozeduren und PL/SQLPakete. 3.3.2 Data Dictionary Cache Der Data Dictionary Cache speichert Objekte aus dem Data Dictionary (Datenbankkatalog). Der Datenbankkatalog ist eine Sammlung von Tabellen, in denen die Struktur der Datenbamk gespeichert wird. 11 3 3.4 System Global Area (SGA) Java Pool Der Java Pool ist für die Zwischenspeicherung von Java Code zuständig. 3.5 Large Pool Im Large Pool werden Speicherstrukturen verwaltet, die man nicht direkt zu SQL zuordnen kann. 12 Literatur Literatur [1] Thomas Kudrass “Taschenbuch Datenbanken“, [HANSER, 2007] [2] Johannes Ahrends, Dierk Lenz, Patrick Schwanke, Günter Unbescheid “Oracle10g für den DBA“, [Addison-Wesley, 2006] [3] Fröhlich, Debes, Czarski “Oracle9i“, [Markt+Technik, 2005] 13