Prozessarchitektur einer Oracle Instanz: Prozesse

Werbung
Prozessarchitektur einer Oracle Instanz:
Prozesse, Speicherstrukturen und
Logging
Reichmann, Chrisian
1. Juli 2008
1
Inhaltsverzeichnis
1 Einführung in die Thematik
3
2 Die Prozessarten
4
3
2.1
Der Benutzerprozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
2.2
Der Listenerprozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.3
Die Hintergrundprozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3.1
Der Archivierungsprozess ( ARCH )
. . . . . . . . . . . . . . . . . .
6
2.3.2
Der Checkpointprozess ( CKPT ) . . . . . . . . . . . . . . . . . . . .
7
2.3.3
Der Datenbank-Schreib-Prozess ( DBWR ) . . . . . . . . . . . . . . .
10
2.4
Der Redo-Log-Schreibprozess ( LGWR ) . . . . . . . . . . . . . . . . . . . .
12
2.5
PMON und SMON Prozess . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.6
Recoverer-Prozess ( RECO ) . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
System global area ( SGA )
14
3.1
Der DB-Block Buffer Pool ( Data Buffer Cache ) . . . . . . . . . . . . . . . .
15
3.2
Redo Log Puffer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
4 Literaturliste
21
1 Einführung in die Thematik
Sobald sich ein Nutzer mit einer Oracle-Datenbank ( im Folgenden mit DB abgekürzt ) verbindet
egal mit welcher Methode, ist eine Datenbankinstanz von Nöten, die den DB-Cache und die
Hintergrundprozesse verwaltet. Dabei können die Prozesse in einigen Betriebssystemen auch
Threads sein. Die Funktionsteilung der einzelnen Aufgaben ist Oracle spezifisch und bildet die
grundlegende Softwarestruktur der Oracle-Datenbank.
Es gibt fünf unterschiedliche Prozessarten:
1. Benutzerprozesse
2. Listenerprozesse
3. Dispatcherprozesse
4. Oracle-Serverprozess ( Kernel )
5. Oracle-Hintergrundprozesse
2 Die Prozessarten
2.1 Der Benutzerprozess
Jedes Programm mit einer Schnittstelle zum Oracle-Datenbankserver wird als Benutzerprozess
gesehen. Dieser Prozess wird meist auf dem lokalem Rechner des Benutzers oder auf einem
Applicationserver ausgeführt.
Die Aufgabe vom Benutzerprozess ist der Aufbau einer Verbindung mit dem Listenerprozess.
Um eine Session aufzubauen, muss der User seinen Benutzernamen und sein Passwort angeben.
2.2 Der Listenerprozess
Nachdem ein Listenerprozess eine “Connect”-Anfrage von einem Benutzerprozess ( im Folgenden mit Up ( userprocess ) abgekürzt ) erhalten hat, besitzt dieser die Aufgabe das Programm
von dem die Anfrage stammt, mit der DB zu verbinden. Der Verbindungsaufbau kann mit verschiedenen Methoden passieren:
• dedicated
Up direkt mit dem Serviceprozess verbunden
alle Requests werden vom Serverprozess beantwortet
diese Ausführung ist gut für viele Anfragen, die schnell beantwortet werden müssen
und auch auch aufwändig sind
• shared
Up direkt mit Dispatcherprozess verbunden
es werden mehrere Up mit einem Dispatcherprozess verbunden
gut bei vielen Nutzern auf einer Datenbank
2.3 Die Hintergrundprozesse
Die Hintergrundprozesse entscheiden sich von den bisher beschriebenen Prozessen durch ihre
Wirkungsreichweite, da alle Hintergrundprozesse ( Backgroundprocesses ) Systemweit wirken.
Aus Leistungsgründen werden bei einem Oracle-System im “Multiusermode” mehrere Prozesse
im Hintergrund verwaltet, die für einen fehlerlosen und sicheren Ablauf der Benutzerverbindungen sorge tragen. Die Anzahl der Hintergrundprozesse können je nach Betriebssystem und
Konfiguration des Oracle-Systems variiren. Auch innerhalb einer Instanz müssen nicht zu jedem
Zeitpunkt gleich viele Prozesse am Arbeiten sein. Die wichtigsten dieser Prozesse werden im
Folgendem erklärt.
2.3.1 Der Archivierungsprozess ( ARCH )
Der Archivierungsprozess ist aktiv, wenn das Oracle-System im “archive”-Modus arbeitet. Dieser Prozess ermöglicht als einziger ein Recovery nach einem Plattenfehler.
Der ARCH-Prozess archiviert alte Redo-Log Files an einen anderen Festplattenplatz, vom dem
aus dann die Log Files auf andere Medien gesichert werden können. Online-Redo-Log Files
werden erst dann wieder zum Schreiben freigegeben, wenn diese archiviert wurden.
Der Archivierungsprozess wird vom LGWR-Prozess aktiviert, wenn dieser einen Redo-Log Filewechsel durchführt. Der ARCH-Prozess erhält die Information, welche Redo-Log-Gruppe archiviert werden sollen. Die Redo-Log Datei kann erst dann wieder überschrieben werden, wenn
der ARCH-Prozess die Datei archiviert und wieder freigegeben hat.
Maximal können 10 Arch-Prozesse aktiv sein, diese Anzahl kann im laufenden Betrieb verändert werden.
Es können maximal fünf Zieladressen für das Wegschreiben der Dateien angegeben werden.
2.3.2 Der Checkpointprozess ( CKPT )
Ein Oracle-System bestimmt Checkpoints oder einen Recovery-Aufsetzpunkt, damit im Fall eines Fehlers die beschädigten Daten wiederhergestellt werden können. Die einfachste Methode
diese Ausfallsicherheit zu erreichen, ist das Zurückschreiben von DB-Blöcken, die noch im DBCache gehalten werden. Somit wird erreicht, dass alle Änderungen der DB-Blöcke auch in den
Datendateien wiedergefunden werden können. Als Zusatz wird im Control File und in den Headern der Datendateien die Kontrollpunktstruktur hinterlassen, so dass das Oracle-System eine
Instanzwiederherstellung1 anfertigen kann.
Es werden u.a. die höchste System Change Number ( SCN ) zum Kontrollpunktzeitpunkt und
die Redo Block Adresse ( RBA )2 in den Datendateikopf geschrieben.
Die Checkpointerstellung verursacht eine kurzzeitige hohe Systemauslastung, aber es kann dennoch ohne Einschänkungen auf dem DB-System weitergearbeitet werden. Es kommt auch nicht
zur Beendigung von anderen Prozessen, somit kann der CKPT-Prozess vollständig autark laufen.
Der bisher genannte Ablauf bei der Checkpointerstellung ist nicht der einzige Fall, der innerhalb einer Oracle-Instanz auftreten kann. Es wird zwischen Level 1 bis Level 3 Kontrollpunkten
unterschieden. Die folgende Tabelle zeigt die Auslöser und die Aktionen, die ausgeführt werden.
1
Instanzwiederherstellung( Crash-Recovery ): Wiederherstellung des DB-Caches und des Buffer-Caches nach dem
die DB-Instanz nicht ordnungsgemäß beendet wurde.
2
RBA gibt an, an welcher Stelle in der Redo-Log Datei der erste für ein Recovery relevante Redo-Block steht
Checkpoint-
- Auslöser
Aktionen
- Redo-Log Switch
Betrifft die gesamte Datenbank alle on-
Level
1
line Dateien der DB
- Shutdown normal, Immediate
Kontrollpunktstruktur wird in Header
der Daten- und Kontrolldateien geschrieben
- alter System switch log
2
- inkrementeller Checkpoint
Betrifft gesamte Datenbank
- keine externen Auslöser
Checkpoint ständig weitergeschrieben
- Erweiterung
des
Buffer-
Managements
DBWR schreibt DB-Blöcke zurürck
die länger im Buffer-Cache oder inaktiv sind
-
Kontrollpunktstruktur in Control-File
geschrieben
3
- Tablespace wird offline gesetzt
Betrifft nicht die gesamte Datenbank
normal oder immediate
- Datafile wird offline gesetzt nor-
Betrifft einzelne Files
mal oder immediate
- Tablespace wird von read-write
nach read only umgestellt
Kontrollpunktstruktur in alle betroffenen Dateiheader und Controlfiles geschrieben
Da es beim LRU Verfahren dazu kommen kann, dass einige DB-Blöcke nicht aus dem DBCache zurückgeschrieben werden, wird unabhängig davon die Verweildauer der einzelnen Blöcke gemessen, um auch diese zu sichern. Dieses Verfahren wird beim inkrementellen Checkpoint
verwendet. Mit Hilfe von dieser Eigenschaft kann dem Oracle-System eine Zeit vorgegeben werden, in der die Instanz-Recovery abgeschlossen ist, da die Dauer der Instanz-Wiederherstellung
abhängig von dem ältesten, veränderten Block ist.
Ein Kontrollpunkt ist ein Ansatzpunkt innerhalb eines Redo-Log-Files für die Instanzwiederher-
stellung, der angibt, von welcher Stelle die Wiederherstellung anfangen soll. Daher hängt die
Dauer des Recovery-Vorgangs davon ab, wie lange der alte Speicherstand her ist, da in der Zwischenzeit mehrere Veränderungen durchgeführt werden können, die wiederhergestellt werden
müssen.
Neben dem Checkpointprozess kümmert sich der DBWR-Prozess3 um die DB-Blöcke, welche
aus dem DB-Cache zurückgeschrieben werden müssen. Dennoch ist der Kontrollpunktprozess
von großer Wichtigkeit, dieser wird alle 3s aktiviert und schreibt die Checkpointstruktur in die
Header der Daten-Files und in die Kontrolldateien. Im Level eins und drei werden die Kontrollinformationen in alle beteiligten Dateien geschrieben, wohingegen bei Level zwei nur die
Kontrolldatei verändert wird.
3
DB Write Prozess
2.3.3 Der Datenbank-Schreib-Prozess ( DBWR )
Der DBWR-Prozess ist der einzige Prozess, der Daten aus dem DB-Cache auf die Platte schreiben kann. Er kann von mehreren Vorgängen ausgelöst werden.
• Freie Pufferanfrage
Ein Prozess signalisiert, dass der Buffer-Cache voll ist
• Timeout des Schreibprozesses
Wenn kein Prozess den DBWR-Prozess innerhalb einer Timeoutzeit von 3s aufruft,
wird er automatisch gestartet
• Kein freier Platz in der LRU4 -Liste
DBWR schreibt die Daten aus dem Puffer auf die Platte
• Ein Kontrollpunkt wurde erreicht
Vom Dirty Puffer in der LRU-Pufferliste in die Dirty-Liste geschrieben und von dort
auf Festplatte
Der Schreibprozess durchsucht die LRU-Liste5 nach veränderten Daten und kopiert gefundene
in die LRUW-Liste6 . Alle unveränderten werden in die LRU-Aux-Liste kopiert und können ab
sofort überschrieben werden. Alle Einträge in der LRUW-Liste werden vom DBWR-Prozess in
die DB-Dateien geschrieben. Anschließend werden die Listen auf den Stand der LRU-Aux-Liste
gesetzt.
Es gibt zwei verschiedene Arten von Anfragen an den Schreibprozess:
• Parallel Serveranfrage
Wenn eine Datenbankinstanz ein Datenblock aus einer anderen Instanz benötigt, wird
4
LRU: Last recently used eine Methode zur Speicherverwaltung
LRU-Liste: Speicherstruktur, in der die zuletzt angeforderten Daten stehen
6
LRUW-Liste: Speicherstruktur, in der die zuletzt veränderten angeforderten Daten stehen
5
der DBWR-Prozess vom LCK0-Prozess7 ausgelöst, und schreibt die Daten vom DBBuffer-Cache in die Datenbankdateien
• Anfrage vom Checkpointprozess
7
LCK0-Prozess: (Paralleler Lock Manager) Wenn das Oracle System auf Parallel Server Modus eingestellt ist, wird
dieser Prozess mitgestartet. Es kann bis zu 10 dieser Prozesse im Oracle-System geben
2.4 Der Redo-Log-Schreibprozess ( LGWR )
Der Redo-Log-Schreibprozess kümmert sich um das korrekte Schreiben der Redo-Blöcke aus
dem DB-Cache auf die Datenbankdateien und sichert, dass die Blöcke in die richtige Redo-LogGruppe geschrieben werden. Mit dem Start einer Oracle-Instanz wird dieser Prozess mitgestartet
und kann durch folgende Vorgänge ausgelöst werden:
• Ein Benutzerprozess beendet eine Transaktion mit einem “commit”
in diesem Fall wird durch den Serverprozess ein “Commitrecord” gebildet
der Record wird in den Redo-Log-Puffer geschrieben, dadurch wird der LGWRProzess ausgelöst
jetzt wird der Eintrag in die Redo-Log-Datei übertragen
• Wenn der Redo-Log-Puffer bis zu
1
gefüllt ist
3
schreibt der LGWR-Prozess alle Daten aus dem Redo-Log-Puffer in die Redo-LogDatei
die Änderungsdaten können aus mehreren Transaktionen stammen
• Wenn Redo-Log-Schreibprozess seit 3s nicht mehr ausgelöst wurde
• Wenn der DBWR-Prozess Daten zurückschreiben will, die sich noch im Redo-Log-Puffer
befinden
Sollte eine Redo-Log-Datei nicht mehr genügend Speicherplatz beinhalten, wird vom LGWRProzess der DBWR-Prozess ausgelöst. Es wird eine neue Redo-Log-Datei angelegt und ein Kontrollpunkt gesetzt. Alle Daten, die sich noch im Buffer befinden, werden, vom LGWR-Prozess
ausgewählt, durch den DBWR-Prozess in die DB-Files abgelegt. Nachdem alle Daten geschrieben wurden, kann die neue Redo-Log-File beschrieben werden.
2.5 PMON und SMON Prozess
Der Prozessmonitor- und Systemmonitor-Prozess übernehmen innerhalb des Oracle-Systems
Aufgaben, die automatisch im Hintergrund ausgeführt werden.
Der PMON-Prozess sucht nach Prozessen, die keinem Benutzerprozess mehr zugeordnet sind,
beendet diese und gibt die gesperrten Ressourcen wieder frei zur Wiederverwendung.
Der SMON-Prozess führt zum einen die Instanz-Recovery durch und zum anderen verwaltet er
globale Speicherbereiche von zusammenliegenden Abhängigkeiten ( Extends sind TablespaceAbhängigkeiten, die von eingestellten Storage-Einstellungen abhängig sind ). Diese treten jedoch nur bei dictonary managed tablespaces auf.
2.6 Recoverer-Prozess ( RECO )
Der Recoverer-Prozess hat die Aufgabe Fehler aufzulösen, die durch Verteiltetransaktionen hervorgerufen werden, z.B. wenn das zwei Phasen-Commit benutzt wird. Dazu verbindet sich der
Reco-Prozess mit der beteiligten Datenbank und wartet so lange bis alle angeforderten Daten
angekommen sind. Im Fehlerfall wird ein Rollback ausgeführt, so als ob es sich nur um eine
Einzeltransaktion handelt.
3 System global area ( SGA )
Wie jeder Prozess benötigt eine Oracle-Instanz Speicher. Der Hauptteil wird vom SGA vereinnamt. SGA steht für system global area und beinhaltet Verwaltungsinformationen für die benötigten Prozesse, zusätzlich wird die Kommunikation der einzelnen Prozesse über diesen Speicher
realisiert. Durch die Bereitstellung der Speicherstrukturen ist es erlaubt, dass mehrere Nutzer
auf das selbe Objekt lesend zugreifen. Durch diesen Aspekt wird dieser Speicher auch oft als
shared global area angesehen. SGA ist geteilt in die folgenden Bereiche:
• Data Buffer Cache
• Dictionary Cache
• Redo Log Puffer
• Shared SQL Pool
3.1 Der DB-Block Buffer Pool ( Data Buffer Cache )
In dem Buffer Cache werden DB-Blöcke gespeichert. Diese können Tabellen-, Rollbacksegmenteoder Index-Blöcke sein. Der Großteil der Prozesse bewirken Änderungen im DB-Buffer. Nur der
Serverprozess darf Daten von der Platte laden und in den Buffer schreiben lassen.
Der Buffer-Pool reduziert die Ladezeiten, die durch Plattenzugriffe entstehen, da alle Operationen im Buffer ausgeführt werden. Folgende Operationen sind möglich:
• Daten lesen oder verändern
• Daten einlesen vom Festplattenspeicher
• Zurückschreiben modifizierter DB-Blöcke
Um die Recovery-Zeit und Platz im Buffer zu schaffen ist die Operation, die für das Write-Back
verantwortlich ist, nicht an Transaktionen gebunden. Für die effiziente Nutzung dieses Speichers
gibt es die LRU8 - und die LRUW9 -Listen. Wobei jede dieser Listen nochmal in -Aux und -Main
unterschieden werden.
Die LRU-AUX Liste beinhaltet alle freien Puffer, die für neue DB-Einträge genutzt werden können. In der LRU-Main-Liste sind die Puffer enthalten, in denen Einträge stehen, dabei kann noch
zwischen modifizierten ( dirty ) und unveränderten ( clean ) Werten unterschieden werden. Auf
den ersten Stellen werden die meist benötigten DB-Blöcke gespeichert, demnach stehen an den
hintersten Stellen die nicht oft benutzten Blöcke.
Wenn eine Anfrage nach einem Datenblock gestellt wurde, wird immer als erstes im DB-Cache
geschaut, ob sich dieser schon im Cache befindet. Sollte dies nicht der Fall sein, liest der Serverprozess den gesuchten Block ein und sucht eine freie Speicherstelle in der LRU-AUX-Liste.
Wenn ein Platz gefunden ist, wird dieser Speicherbereich aus der LRU-Aux-Liste ausgetragen
und in die LRU-Main-Liste an mittlerer Position eingefügt. Erst nachdem eine weitere Operation auf diesem Speicherbereich ausgeführt wurde, wird er an die erste Stelle der Main-Liste
geschoben.
Da die LRU-Listen eine bestimmte Größe haben, muss der DBWR-Prozess dafür sorgen, dass
8
9
LRU: Last recently used
LRUW: Last recently used write
modifizierte “alte” Werte zurück in den DB-Dateien geschrieben werden. Dafür wird die LRUMain-Liste von hinten durchlaufen, um zum einen die unveränderten Werte in die LRU-AuxListe zu übertragen, so dass dieser wieder zum Beschreiben freigegeben ist, und zum anderen
die modifizierten Speicherblöcke in die LRUW-Main-Liste zu schreiben. Diese sind jetzt Kandidaten für den nächsten Schreibvorgang. Nachdem die Daten-Blöcke gespeichert sind, müssen
diese in die LRUW-Aux-Liste eingetragen und mit Hilfe von einem “Flag” als unmodifiziert
gekennzeichnet werden. Jetzt stehen die weggeschriebenen DB-Blöcke zum Schreiben bereit.
Ein großer Vorteil besteht in der Verfügbarkeit der Daten, da diese zwar gespeichert sind, aber
dennoch ihren ursprünglichen Wert beinhalten und somit immer noch direkt ausgelesen werden
können. Sollte diese Speicherstelle benötigt werden, kann sie jedoch überschrieben werden.
Diese Vorgehensweise hat sehr gute Laufzeiten, wenn es wenige Blöcke gibt, auf die sehr oft
zugegriffen wird. Sollte z.B. eine komplette Tabelle durchsucht werden, dann wäre dieses Prinzip ein Flaschenhals, da jeder Block an die erste Stelle eingefügt werden müsste. Da sonst alle
aktiven Einträge entfernt würden, werden bei Table-Scans die Einträge an das Ende der LRUMain-Liste angefügt10 .
Da auf Parallelität nicht verzichtet werden kann, wird eine Management verlangt, welches konkurierende Zugriffe verwaltet. Mit Hilfe von LRU-Latches11 wird realisiert, dass die Liste für
abhängige Zugriffe konsistent bleibt. Es gibt die Möglichkeit mehrere LRU-Latches in einem
System zu erstellen, das hat den Vorteil, dass mehrere LRU-Sets12 angelegt werden können.
In Hinblick auf die Performance wird der Buffer oft noch weiter aufgeteilt in unterschiedliche
Bereiche für unteschiedliche Aufgaben:
• Keep-Pool
Beinhaltet Tabellenindizes ähnlich dem “cache” Parameter
• Recycle-Pool
Eignet sich für die Indexverwaltung großer Tabellen mit wenig Wiederverwendbarkeit
10
Ausnahmen sind Tabellen die mit dem Parameter “cache” erstellt wurden, von diesen wird angenommen, dass
wenige Einträge vorhanden sind und diese oft benötigt werden
11
LRU-Latches: kurzzeitige Sperren der Listenstruktur
12
LRU-Sets: eine Liste besteht aus: LRU-Aux-, LRU-Main-, LRUW-Aux-, LRUW-Main-Liste
Für die Erstellung von den verschiedenen Puffern muss explizit ein Parametereintrag im
“init.ora’-File erfolgen. Die Größe des gesamten Speichersplatzes wird mit “DB BLOCK BUFFERS” festgelegt und die Größe der anderen Buffer jeweils mit “DB POOL KEEP” bzw. mit
“DB POOL RECYCLE”. So ergibt sich die Default-Buffergröße aus der Differenz von der Gesamtgröße mit der Summer der beiden Teilgrößen.
Ohne explizite Angabe des Buffers wird jedes Objekt im Default-Buffer eingelagert, dennoch
sollten alle Arten des Puffers genutzt werden, weil so die Performance verbessert werden kann,
da sie mehrere Verwaltungsobjekte benutzt und auch die Speicherbereiche effizienter genutzt
werden können.
Oft kann das Datenbanksystem auf das Einsatzgebiet abgestimmt werden. Es eignet sich z.B.
der einfache LRU-Algorithmus für OLTP13 -Anwendungen, wo hingegen dieser nicht sehr performant bei DSS14 -Anwendungen arbeitet. Folglich gibt es mehrer Profile, in denen eine Datenbank arbeiten kann:
Art der Anfragen
- Einstellung der Datenbank
Ausgewählte Datensätze werden ein- - Beste Möglichkeit ist den Defaultzeln mittels Index ermittelt, wobei wie-
Buffer zu verwenden, da jeder Eintrag
derholte Anfragen oft vorkommen
am Anfang der LRU-Main-Liste eingefügt wird.
Auslesen kompletter Tabellen mit ge- - Der Default-Puffer bietet sich an, da
ringer Wiederverwendung der Einträge
bei Table-Scans die Werte am Ende der
LRU-Liste angehangen werden
Die Göße des Buffers wird durch folgende Initialisierungsparameter in der “init.ora” Datei
festgelegt:
DB_BLOCK_SIZE
DB_BLOCK_BUFFERS
Data-dictionary-views in den die eingestellten Werte eingesehen werden können:
13
14
OLTP : Online transaction processing
DSS : decision support system
V$BUFFER_POOL
V$BUFFER_POOL_STATISTICS
Änderung der Anzahl von LRU-Latches zur Verwaltung des Buffers:
DB_BLOCK_LRU_LATCHES
[DEFAULT] = ANZ(CPU ) / 2
Einteilung des Buffer-Pools
DB_BLOCK_BUFFERS = WERT
BUFFER_POOL_KEEP = ( " BUFFERS = WERT1, LRU_LATCHES = WERT2" )
BUTTER_POOL_RECYCLE = ( " BUFFERS = WERT3, LRU_LATCHES
3.2 Redo Log Puffer
Aus Performance-Gründen werden alle Dateneinträge nicht direkt auf die Festplatte geschrieben, aber auch die Log-Einträge werden in einem Puffer zwischengespeichert. In der Hinsicht,
dass der Buffer-Cache sich für die Zwischenspeicherung nicht eignet, da der Datendurchsatz
vermindert werden würde, gibt es einen Redo-Log-Puffer in dem alle Redo-Informationen zwischengespeichert werden.
Um weniger Informationen speichern zu müssen, werden so genannte “change vectors” bestimmt und weggeschrieben. Demnach müssen zwei Operationen permanent auf dem RedoPuffer arbeiten. Der LGWR-Prozess schreibt Einträge aus dem Redo-Log-Puffer in die RedoLog-Dateien und die Oracle Serverprozesse schreiben die Änderungsdaten in den Pufferspeicher.
Eine Sperrenverwaltung wird wieder mittels Latches gelöst:
• redo_allocate_latch
Sperrt Speicherbereiche, für die Allokierung
Dieses Latch kann nur einmal vergeben werden und wird weitergereicht
Dieser Vorgang dauert wenige Taktzyklen, so dass es zu keinem Engpass kommt
• redo_copy_latch
Sperrt einzelne Bereiche, auf denen geschrieben werden soll
Die Anzahl des Latchen ist gleich der CPUs im System
Es wird nur ein kleiner Bereich gesperrt, somit sind parallele Vergaben möglich
Der Ablauf eines Schreibprozesses läuft aus Sicht der Sperren wie folgt ab. Zunächst wird vom
Serverprozess ein “redo_copy-Latch” angefordert, im darauf folgendem Schritt wird zusätzlich
das “redo_allocate-Latch” angefordert. Sobald beide Sperren gesetzt sind, beginnt die Allokierung des gewählten Speicherbereiches. Letztendlich wird nach der Reservierung des Speichers
dem Severprozess zugeteiltem “redo_allocate-Latch” dieser Speicherbereich übergeben, so dass
das Allokierung-Latch freigegeben werden kann. Anschließend wird der “Change-Vector” auf
diesen Bereich geschrieben und das “Copy-Latch” wieder freigegeben.
Das Festschreiben auf einen Plattenspeicher übernimmt letztendlich der LGWR-Prozess, der
durch folgende Maßnahmen aktiviert werden kann:
• eine Transaktion wird mit einem “Commit” beendet
• der Puffer ist mehr als
1
4
voll
• der LGWR-Prozess war länger als 3s inaktiv
• der DBWR-Prozess fordert Daten an, deren ”Chang-Vector“ noch nicht zurückgeschrieben wurden
Wenn ein Speicherbereich auf einem Festwertspeicher/Plattenspeicher geschrieben wurde, kann
dieser wieder im Redo-Log-Puffer benutzt werden
View, die eine Übersicht über die Latches gibt
v$latch
Festlegen der Größe des Redo-Log-Puffers in der init.ora-Datei, x gibt die Größe in Byte an.
LOG_BUFFER = x
4 Literaturliste
• http://www.sebastian-schneemann.de/userfiles/file/dbinstance.pdf
• ”Oracle“ 10g Von Lutz Fröhlich, Carsten Czarski, Klaus Maier; Pearson Education Verlag
• ”Oracle9i UNIX Administration Handbook“ by Oracle press, authored by Donald K. Burleson
• ”Oracle für den DBA“ von J. Ahrends, D. Lenz, P. Schwanke, G. Unbescheid ,Pearson
Education
• ”Oracle8 fà 14 r den DBA . Verwalten, optimieren, vernetzen “ von Herrmann, Lenz, Unbesch
Herunterladen