Fritz Hoogland, dessen Blog eine der besten Quellen zu I/O-Fragen in Oracle ist, beschäftigt sich in seinem aktuellen Artikel mit der Performance von Logical-I/O-Zugriffen. Ausgangspunkt ist dabei, dass der Kernel aktueller Redhat-Versionen die Möglichkeit bietet, via systemtap die Performance einzelner OS-Routinen zu überprüfen. Aufgrund entsprechender Aussagen des Oracle Supports und eigenen Beobachtungen kann der Autor Consistent Reads der C-Funktion kcbgtcr() zuordnen, während Current reads wohl durch kcbgcur() abgebildet sind. Aufbauend auf diesen Voraussetzungen werden im Artikel diverse OS-Skripte und ihre Ergebnisse vorgestellt, aus denen hervorgeht, dass die Ausführung von kcbgtcr in der Regel sehr wenig Zeit benötigt (1-2 Mikrosekunden), aber in einzelnen Fällen dramatisch langsamer ist (um den Faktor 100K). Mit Hilfe eines (nicht unbedingt minimal invasiven) systemtab-Skripts kann der Herr Hoogland die Ursache der Abweichungen bestimmen: in den langsamen Fällen ruft ein logischer Blockzugriff einen physikalischen Lesezugriff hervor, weil der Block erst in den Cache gelesen werden muss. Vom Ergebnis her ist das nicht unbedingt eine große Überraschung, aber das - hier nur schemenhaft wiedergegebene - Analysevorgehen ist außerordentlich eindrucksvoll. Ich gehe davon aus, dass sich mit ähnlichen Verfahren sehr umfassende Einblicke in die interne Arbeitsweise des Oracle Servers erreichen lassen.
Keine Kommentare:
Kommentar veröffentlichen