Was der Herr Lewis in seinem Buch leistet, ist das, was Tom Kyte in Expert Oracle Database Architecture explizit verweigert: "Time and time again, I get questions regarding the exact bits and bytes of redo and undo. People seem to want to have a very detailed specification of exactly, precisly, what is in there. I never answer those questions." (S. 299) Der Herr Kyte hat dafür durchaus gute Gründe: er will die grundsätzlichen Konzepte erläutern und erklären, wozu redo und undo gedacht sind und wie sie zusammenarbeiten. Möglicherweise sieht er auch ähnliche Problem wie Tanel Poder, dessen (in Oracle Core zitierte) Erklärung, warum er selbst kein Buch über Oracle Internals schreibe, lautet: "I think the subject just changes too fast." (S. XIV) Dass Jonathan Lewis trotzdem ein Buch geschrieben hat, dessen Halbwertszeit - meiner Einschätzung nach - recht hoch sein wird, liegt daran, dass er in erster Linie über die grundlegendsten Mechanismen des Oracle Servers schreibt, und diese Mechanismen sind letztlich doch recht stabil. Vieles von dem, was man in Oracle Core findet, konnte man auch schon anderswo lesen: vor allem in den zahlreichen hochklassigen Blogs der Oracle-Community. Aber die konsistente Darstellung dieser Einzelbeobachtungen im Zusammenhang ist die große Leistung des Herrn Lewis, der meiner Meinung nach ohnehin einer der besten Stilisten unter den Oracle-Autoren ist.
Es folgt eine kurze Zusammenfassung der Kapitel des relativ schmalen Bandes (266 Seiten), aber die wird hier als work-in-progress erst allmählich entstehen, weil mich die nachvollziehende Lektüre sehr viel Zeit kosten wird:
Kapitel 1: Getting Started: liefert auf vier Seiten eine ganz knappe Übersicht zu den Prozessen und Speicherstukturen in einer Oracle Instanz.
Kapitel 2: Redo and Undo: erläutert das Zusammenspiel von Redo und Undo bei einer Blockänderung: zu jeder Änderung werden eine redo-Information und eine undo-Information erzeugt, wobei auch für die undo-Information noch einmal eine redo-Information geschrieben werden muss. Erst dann kann die Änderung im data block erfolgen. Die Reihenfolge ist dabei:
- change vector für undo record erzeugen
- change vector für data block erzeugen
- change vektoren kombinieren und redo in den log buffer schreiben
- undo record in den undo block schreiben
- Änderung des data blocks durchführen
In älteren Releases wurde für jede Änderung einer Session ein redo record in den log buffer eingetragen, aber seit Oracle 10 werden mehrere Änderungen in einem privaten Speicherbereich (private strand) gesammelt und dann zusammengefasst gespeichert, was eine Reduzierung der erforderlichen Latches (redo copy, redo allocation) herbeiführt (allerdings kommen neue In memory undo Latches hinzu), die dadurch noch signifikanter wird, dass es mehrere child latches für die In memory undo Latches gibt, während die Latches für den zentralen Log Buffer notwenigerweise eine knappe Ressource waren.
Wie die folgenden Kapitel basiert auch dieses auf der detaillierten Auswertung von Block Dumps, die alle relevanten Informationen zu den Zusammenhängen enthalten - man muss sie nur interpretieren können ...
Keine Kommentare:
Kommentar veröffentlichen