Mittwoch, Januar 04, 2012

Oracle Core von Jonathan Lewis

Kurz nach Weihnachten hat mir Amazon das bei Apress erschienene Buch Oracle Core. Essential Internals for DBAs and Developers von Jonathan Lewis zugeschickt. Bei Amazon gibt's dazu aktuell fünf Customer Reviews, die dem Buch jeweils fünf Sterne zusprechen - die erste und ausführlichste hat (natürlich) Charles Hooper geliefert (und man findet sie - natürlich - auch in seinem Blog). Wenn man berücksichtigt, dass ich hier vermutlich auf keinen anderen Blog so viele Links setze, wie auf das Lewis'sche Scratchpad und dass ich kein anderes Buch so oft erwähne wie Cost-Based Oracle, überrascht's vermutlich nicht allzu sehr, dass ich jetzt in die allgemeinen Lobeshymnen einstimmen werde: der Herr Lewis hat da - zum dritten Mal (nach dem CBO-Buch und dem selbst heute noch relevanten Practical Oracle 8i aus dem Jahr 2000) - ein grundlegendes Buch zum Verständnis des Oracle Servers vorgelegt. Tanel Poder, der offizielle Technical Reviewer des Bandes (was ein weiteres Qualitätssiegel wäre, wenn man noch eines brauchte), schreibt in seinem Amazon-Kommentar: "It will probably become THE technical source for Oracle internals information for the next 10 years, just like Steve Adams'es Oracle Internal Services book was in the previous decade." Und damit hat er vermutlich recht.

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