Oracle Performance-Analyse mit TVD$stat / D - Trivadis
Oracle Performance-Analyse mit TVD$stat / D - Trivadis
Oracle Performance-Analyse mit TVD$stat / D - Trivadis
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
SOUG: Beitrag <strong>Trivadis</strong> SA, Yann Neuhaus (yann.neuhaus@trivadis.com)<br />
Betrifft <strong>Oracle</strong> <strong>Performance</strong>-<strong>Analyse</strong> <strong>mit</strong> <strong>TVD$stat</strong><br />
Art der Info <strong>Trivadis</strong> Tool<br />
Quelle Praktische und theoretische Erfahrungen<br />
Einleitung<br />
Welche Applikationen, die eine Datenbank benötigen, zeichnen sich heutzutage durch<br />
dauerhaft optimale Leistungen aus?<br />
Es existieren in der Tat nur wenige Sites in der erforderlichen oder erwarteten<br />
Gebrauchsqualität. Auf Grund der Komplexität der Applikationen wird das Tuning in<br />
unzähligen Fällen zu einer gängigen und notwendigen Praxis.<br />
Oft liegt eine der grössten Schwierigkeiten beim Tuning in der Lokalisierung der<br />
Verzögerungspunkte. Wenig leistungsstarke SQL-Abfragen, I/O-Überaktivität, Konflikte<br />
<strong>mit</strong> Lock, Wait usw. können sich ebenfalls leistungsmindernd auswirken. Eine Fülle von<br />
Scripts (abrufbar unter www.trivadis.com) liefern wertvolle Informationen zu den<br />
kritischen Parametern der Datenbank. Informationen, die die Entwicklung dieser<br />
Kriterien schnell und ergonomisch aufzeigen, können allerdings manchmal von Nutzen<br />
sein. Wenn beispielsweise in der Datenbank viele I/O generiert wurden, wäre es<br />
interessant zu erfahren, zu welchem Zeitpunkt die I/Os generiert wurden und<br />
gegebenenfalls welche Prozesse an ihrer Erstellung beteiligt waren. Verschiedene Tools<br />
decken einige dieser Funktionen ab, die Kosten hierfür stellen jedoch häufig ein<br />
unüberwindliches Hindernis dar.<br />
<strong>Oracle</strong> hat kürzlich ein interessantes (und kostenloses) Tool vorgestellt, <strong>mit</strong> dem sich<br />
die <strong>Performance</strong>-Entwicklung einer Datenbank verfolgen lässt. Dieses Tool heisst<br />
STATPACK und ersetzt utlbstat.sql und utlestat.sql. Es bietet einige interessante<br />
Funktionen, hat aber auch seine Grenzen. Diese versucht <strong>TVD$stat</strong> <strong>mit</strong> einer<br />
verbesserten Anwendungsergonomie zu überwinden. In diesem Beitrag wird <strong>TVD$stat</strong><br />
vorgestellt. Ursprung, Architektur und Funktionen werden beschrieben, um dem Leser<br />
die Möglichkeiten dieses Tools zu veranschaulichen.<br />
Ursprung von <strong>TVD$stat</strong><br />
Beim <strong>Oracle</strong> Consulting, das mich jeden Tag (und nicht nur jeden Arbeitstag)<br />
beschäftigt, werde ich selbstverständlich <strong>mit</strong> ständig wiederkehrenden Problemen<br />
konfrontiert. Die Leistungsfähigkeit der Datenbank stiess bei mir auf ein besonderes<br />
Interesse. Die Verschiedenartigkeit und Komplexität der Probleme - vom SQL-Tuning<br />
bis zum Fine Tuning der Datenbank selbst - lässt die Verkürzung der Antwortzeiten zu<br />
einer umfassenden Aufgabe werden.<br />
Von sämtlichen verfügbaren Tools und Verfahren bot meiner Meinung nach kein<br />
einziges die Möglichkeit zu einer detaillierten Beobachtung der Datenbankentwicklung.<br />
Zahlreiche Scripts geben zwar Auskunft darüber, ob die Lesen/Schreiben-Aktivität zu<br />
einem bestimmten Zeitpunkt konsequent war; eine eindeutige Bestimmung ihrer<br />
Entwicklung ist jedoch leider nicht möglich. Selbstverständlich lässt sich das Ergebnis<br />
der Scripts auf die eine oder andere Art und Weise <strong>mit</strong> Hilfe geeigneter Methoden<br />
planmässig und chronologisch erfassen, um einen schönen Bericht im (...) Textmodus
zu erhalten. Da ich selbst ein Befürworter von Befehlszeilen bin, um genau über meine<br />
Arbeitsschritte Bescheid zu wissen (im Gegensatz zu den Vorschlägen einiger OS-<br />
Systeme), bin ich trotzdem davon überzeugt, dass eine Datenbeobachtung ohne Grafik,<br />
<strong>mit</strong> exakten Daten selbstverständlich, nicht möglich ist.<br />
<strong>TVD$stat</strong> wurde geschrieben, um eine konkrete Antwort auf die folgende Frage zu<br />
geben: "Wann traten die Probleme auf und wodurch wurden sie verursacht?"<br />
Architektur<br />
Informationen über die Datenbank und ihren chronologischen Ablauf erhält man von<br />
STATSPACK. Dieses neue Tool von <strong>Oracle</strong> ermöglicht die Erstellung von Berichten über<br />
sämtliche kritischen Parameter für ein gegebenes Intervall. <strong>TVD$stat</strong> baut auf<br />
STATSPACK auf und soll im wesentlichen verbesserte <strong>Analyse</strong>funktionen liefern. Zu<br />
diesem Zweck wird von einem WEB-Server (Apache) ein grafisches Interface dynamisch<br />
generiert, was eine Interaktion des Anwenders <strong>mit</strong> den dargestellten Daten gestattet.<br />
<strong>TVD$stat</strong> wird in Perl entwickelt und basiert auf dem wertvollen Apache-Modul<br />
mod_perl. Dieses ermöglicht nämlich beständige Datenbankanschlüsse. Wer Apache<br />
und mod_perl selbst installieren möchte (obwohl zusammen <strong>mit</strong> <strong>TVD$stat</strong> geliefert),<br />
kann in meinem letzten SOUG-Beitrag nachlesen.<br />
Hierbei wird die von Perl generierte CGI-Technologie benutzt. Der Anschluss des WEB-<br />
Servers an die Datenbank erfolgt über die Libraries Perl DBI und DBD. Ein weiterer<br />
wichtiger Aspekt ist die Verwendung von Cookies. Unter CGI erfolgt <strong>mit</strong> jedem Zugang<br />
zum WEB-Server ein Anschluss an die Datenbank. Die Cookies (Speichern des<br />
Passworts) sind so<strong>mit</strong> von kapitaler Bedeutung. Dabei muss man allerdings wissen, dass<br />
das Passwort selbstverständlich nicht ausgeschrieben gespeichert, sondern <strong>mit</strong> Hilfe<br />
eines parametrierbaren Codes verschlüsselt wird. Aus diesem Grunde müssen die<br />
Passwörter der <strong>Oracle</strong> Bediener aus mindestens 8 Zeichen zusammengesetzt sein, da<br />
sie ansonsten als nicht gesichert gelten und die Verbindung nicht möglich ist.
Die nachstehende Skizze gibt einen kurzen Überblick über die Gesamtarchitektur von<br />
<strong>TVD$stat</strong>.<br />
Die Grafiken von <strong>TVD$stat</strong> werden von den Libraries Perl GD und GD::Graph<br />
generiert. Achtung, die Bilder werden nicht auf dem WEB-Server gesichert, sondern<br />
direkt an den Client gesendet. Leider enthält nur Netscape diesen Objekttyp, obwohl<br />
die Spezifikation von allen Mitgliedern des WWW-Konsortiums, darunter auch<br />
Microsoft, unterzeichnet wurde.<br />
STATSPACK<br />
Von grundlegender Bedeutung in der Architektur von <strong>TVD$stat</strong> ist, wie bereits erwähnt,<br />
das <strong>Oracle</strong> ToolSTATSPACK, welches das Sammeln von Statistiken über die Datenbank<br />
gestattet (erhältlich ab Version 8.1.5). Es ermöglicht das chronologische Erfassen von<br />
Informationen dank einem ebenfalls Statspack genannten Package. Bei der Installation<br />
wird ein "PERFSTAT" Benutzer geschaffen, der die Objekte von STATSPACK enthält.<br />
Eine unter $ORACLE_HOME/rdbms/admin verfügbare Hilfedatei gibt Einzelheiten zur<br />
Funktionsweise von STATSPACK, was jedoch nicht Thema dieses Beitrags ist.
Funktionen<br />
Ohne allzu ausführlich auf die Einzelheiten sämtlicher Funktionen von <strong>TVD$stat</strong><br />
eingehen zu wollen, wird im folgenden die Funktionsweise kurz vorgestellt. Eine der<br />
Hauptfunktionen von <strong>TVD$stat</strong> soll als Beispiel dienen und wird detailliert erläutert.<br />
Das Prinzip von <strong>TVD$stat</strong> basiert darauf, die Daten von STATSPACK zu präsentieren,<br />
ohne sich dabei auf ein vorgegebenes Intervall zu beschränken, sondern vielmehr auf<br />
die in einer gegebenen Periode enthaltenen Werte (alle Intervalle). Ausgehend von<br />
dieser Periode ergibt sich eine Grafik und lässt die Entwicklung der Werte auf den<br />
ersten Blick erkennen und beurteilen. Diese Grafik wird durch eine Tabelle ergänzt,<br />
welche dieselben Informationen enthält. Nach dem Auswählen der zu analysierenden<br />
Periode (übereinstimmend <strong>mit</strong> der in STATSPACK) ist dank einem kleinen unter<br />
JAVASCRIPT geschriebenen Menü ein schneller Zugriff auf die gewünschten<br />
Informationen möglich.<br />
Die vorstehende Abbildung zeigt die Auswahltabelle <strong>mit</strong> den Snapshots.<br />
Load Profile<br />
Unter den Rubriken von <strong>TVD$stat</strong> findet man an erster Stelle das "Load Profile" <strong>mit</strong><br />
Angaben zu bestimmten Werten, wie Block-, Sortierungsaktivitäten, Aufrufen von<br />
Verfahren usw. Um einen Vergleich <strong>mit</strong> den fast unlesbaren Berichten von STATSPACK<br />
zu ermöglichen, folgt nachstehend ein kleines Beispiel für ein Load Profile zwischen<br />
den Snapshots 1 und 6.<br />
Bericht von STATSPACK (nur von 1 bis 2)<br />
Load Profile<br />
~~~~~~~~~~~~<br />
Per Second Per Transaction
--------------- ---------------<br />
Redo size: 32,847.20 328,472.00<br />
Logical reads: 11,146.80 111,468.00<br />
Block changes: 97.10 971.00<br />
Physical reads: 15.50 155.00<br />
Physical writes: 3.20 32.00<br />
User calls: 6.60 66.00<br />
Parses: 16.30 163.00<br />
Hard parses: 1.40 14.00<br />
Sorts: 7.10 71.00<br />
Transactions: 0.10<br />
Rows per Sort: 45.58<br />
Pct Blocks changed / Read: 0.87<br />
Recursive Call Pct: 97.19<br />
Rollback / transaction Pct: 0.00<br />
Output von <strong>TVD$stat</strong> (in diesem Fall ist der Zeitraum vollständig)
Ratios<br />
Wie jeder gute DBA neigen oder haben auch Sie sicherlich dazu geneigt, die "Cache hit<br />
ratio", "Library hit ratio" usw. genauestens zu beobachten. STATSPACK bietet die<br />
Möglichkeit, diese Werte für jedes zu analysierende Intervall zu bestimmen. <strong>TVD$stat</strong><br />
geht noch einen Schritt weiter und gestattet es, die Entwicklung dieser Prozentsätze<br />
über den gesamten Zeitraum zu beobachten. Da<strong>mit</strong> lässt sich ohne Schwierigkeiten<br />
bestimmen, in welchem Intervall neue Blocks, neue Libraries geladen wurden.<br />
Waits<br />
Die Beobachtung der Waits kann sich ebenfalls als sehr wertvoll erweisen. Im Fall von<br />
<strong>TVD$stat</strong> ist die tatsächliche Anzahl von Waits in jedem Intervall festgelegt. Anhand<br />
dieser Informationen lassen sich von nun an Grafiken erstellen, die die Entwicklung der<br />
Waits-Anzahl aufzeigen. <strong>TVD$stat</strong> liefert erneut ergänzende Funktionen; es besteht<br />
beispielsweise die Möglichkeit auszuwählen, wie viele Ereignisse auf der Liste der<br />
häufigsten Ereignisse erscheinen sollen. Nach Belieben kann man sich die 5, 10 oder 15<br />
zeit- bzw. zahlenmässig aufwendigsten Waits anzeigen lassen (selbstverständlich unter<br />
der Voraussetzung, dass zuvor die timed_statistics aktiviert wurden). Auf zwei sehr<br />
wichtige Aspekte ist noch hinzuweisen. Zunächst können die Waits auf<br />
unterschiedliche Art und Weise sortiert werden: vergangene Zeit, Anzahl der Waits pro<br />
Transaktion usw. Der zweite wichtige Punkt ist die Tatsache, dass nur die Ereignisse<br />
(Waits) grafisch dargestellt werden, die im Verlauf der analysierten Periode entstanden<br />
sind; diese sind an ihrer roten Farbe erkennbar. Die stagnierenden Werte (blau) sind in<br />
einer Grafik nicht von Interesse. Ausserdem ist die Zahl der Informationen pro Grafik in<br />
<strong>TVD$stat</strong> einstellbar.<br />
Aktivität<br />
Die folgenden vier Abschnitte: Instance Activity Statsitics, Wait/Enqueue Activity,<br />
Rollback Activity und Latch Activity weisen dieselben Eigenschaften wie die vorherigen<br />
Abschnitte auf. Ausserdem können die Statistiken je nach Interessensschwerpunkt<br />
angezeigt werden: Informationen über Physical IO, Redo usw.<br />
Disk IO<br />
Dieser Abschnitt ist reich an Informationen, und zwar aus dem guten und einfachen<br />
Grunde, weil die IO oft eine Problemquelle auf der Datenbank darstellen. Die erste<br />
Funktion, die die Tablespaces für jedes Intervall auflistet, indem es sie nach der Anzahl<br />
der generierten IO sortiert, ermöglicht eine schnelle Bestimmung der IO<br />
beanspruchenden Tablespaces. Durch einfaches Anklicken des betreffenden Tablespace<br />
lässt sich seine Entwicklung über den gesamten Zeitraum beobachten. Es folgt ein<br />
vollständiges und detailliertes Anwendungsbeispiel, um die Nutzung dieser<br />
Informationen zu verdeutlichen.
Informationen über die SGA<br />
In diesem Teil von <strong>TVD$stat</strong> können wertvolle Informationen über den<br />
Datenbankspeicher gesammelt werden. Ein Kreisdiagramm zeigt zunächst die Struktur<br />
der SGA, und anschliessend veranschaulicht eine detaillierte Ansicht des variablen Teils<br />
die Entwicklung der SGA.<br />
Es ist ebenfalls darauf hinzuweisen, dass diese Informationen durch einfaches Anklicken<br />
der Histogramme der verschiedenen Ratios (Library hit ratio, cache hit ratio usw.)<br />
abrufbar sind.<br />
Zu beachten ist ausserdem, dass nur STATSPACK 8.1.7 eine Unterscheidung der<br />
verschiedenen "Pools" (keep, default, recycle usw.) bei ihrer <strong>Analyse</strong> gestattet.<br />
Anwendungsbeispiel<br />
Eine der zahlreichen Funktionen von <strong>TVD$stat</strong> ist sehr interessant und könnte sich als<br />
ausgesprochen nützlich erweisen: die Lokalisierung der IO beanspruchenden SQL-<br />
Abfragen. Es ist tatsächlich möglich, so wie es gezeigt wurde, die Gesamtanzahl der pro<br />
Disk, Tablespace oder Periode generierten IO zu bestimmen. Weichen in einem<br />
verdächtigen Zeitraum die Werte der Histogramme deutlich vom Durchschnitt ab,<br />
besteht die Möglichkeit, sich <strong>mit</strong> einem einfachen Anklicken des Histogramms der IO<br />
die im Laufe dieses Intervalls ausgeführten SQL-Befehle anzeigen zu lassen.<br />
Im vorliegenden Beispiel fanden im Fall von Tablespace TVDTUN_DATA neben dem<br />
Lesen/Schreiben zwischen Snapshot 3 und 4 die "verdächtigen" Lesen/Schreiben-<br />
Vorgänge zwischen 1 und 2 statt. Durch Anklicken der roten Säule (phyrds zwischen 1
und 2) können die SQL-Befehle in der SGA zum Zeitpunkt des Snapshot direkt<br />
beobachtet werden:<br />
Anhand dieser sehr wertvollen Informationen können die offensichtlich IO<br />
beanspruchenden SQL-Befehle eingehend geprüft werden. <strong>TVD$stat</strong> bietet wiederum<br />
<strong>mit</strong> einfachem Anklicken die Möglichkeit, den Explain Plan ACTUEL dieser SQL-<br />
Abfrage zu analysieren. Es handelt sich um den Plan zum Zeitpunkt der <strong>Analyse</strong> und<br />
nicht um jenen bei der Ausführung. Dennoch können sich diese Informationen in<br />
zahlreichen Fällen als sehr nützlich erweisen. Mit <strong>TVD$stat</strong> ist man so<strong>mit</strong> in der Lage,<br />
allgemeine Informationen sehr präzise und detailliert zu analysieren, um die<br />
notwendigen und sinnvollen Aktionen auszuführen.
Stellenwert<br />
<strong>TVD$stat</strong> ist ganz sicher eine Hilfe für den DBA. Auf gar keinen Fall ist es ein "Click<br />
And See" Tool für Lambda-Anwender. Die Informationen von <strong>TVD$stat</strong> können sehr<br />
sachdienlich sein, setzen allerdings das entsprechende Verständnis bei demjenigen<br />
voraus, der sie interpretiert. <strong>TVD$stat</strong> ist wohl bemerkt kein Administrations-Tool,<br />
sondern eine Tuning-Hilfe. Es benötigt ausserdem eine längere Bearbeitungszeit, da<br />
Zeiträume analysiert werden (Funktionen von STATSPACK). Dieses Programm ist in der<br />
Tat eine <strong>Analyse</strong>ergänzung zu einem anderen Tool von <strong>Trivadis</strong>: TVD$tun. Mit diesem<br />
Programm lässt sich zu einem gegebenen Zeitpunkt der Zustand der Datenbank<br />
beobachten. Dieser Ansatz ist zunächst sehr effektiv, lässt jedoch eine Kontrolle über<br />
die Entwicklung der Werte nicht zu. <strong>TVD$stat</strong> und TVD$tun sollten sich so<strong>mit</strong> gut<br />
ergänzen, um eine detaillierte Datenbankanalyse zu gewährleisten.<br />
Ebenfalls zu erwähnen ist, dass es absolut nicht in der Absicht von <strong>TVD$stat</strong> liegt, <strong>mit</strong><br />
den megavollständigen Tools von <strong>Oracle</strong>, wie Quest usw., zu konkurrieren, sondern<br />
möglichst präzise den spezifischen <strong>Analyse</strong>bedarf der <strong>Oracle</strong> DBA abzudecken. Eines<br />
der wesentlichen technischen Ziele von <strong>TVD$stat</strong> ist es, die Nachteile von<br />
STATSPACK auszugleichen: kein grafisches Interface, wenig benutzerfreundliche<br />
Bedienung, keine Periodenanalyse usw.<br />
Zusammenfassung<br />
<strong>TVD$stat</strong> sollte die Erwartungen zahlreicher DBA erfüllen, deren Datenbanken noch<br />
nicht die erforderliche Leistung erbringen. Die Zukunft dieses Tools hängt von der<br />
Zukunft von STATSPACK ab, das in seiner Version 8.1.7 offensichtlich von zahlreichen<br />
Verbesserungen profitiert hat. <strong>TVD$stat</strong> wird all diese zukünftigen Verbesserungen <strong>mit</strong><br />
Sicherheit in den kommenden Versionen berücksichtigen (wie es bereits in Version<br />
8.1.7 der Fall ist).<br />
Zahlreiche Funktionen werden in <strong>TVD$stat</strong> noch entwickelt werden. In diesem<br />
Zusammenhang kann sich die Integration <strong>mit</strong> anderen Tuning- und Monitoring-Tools<br />
von <strong>Trivadis</strong> als sehr interessant erweisen. Die Möglichkeiten sind immens, ohne dabei<br />
selbstverständlich zu vergessen, im eigentlichen Bereich des Datenbank-Tunings zu<br />
bleiben.<br />
<strong>TVD$stat</strong> kostet 1200 SFR und kann als Demo-Version auf der WEB-Site von <strong>Trivadis</strong><br />
(www.trivadis.com) bezogen werden. Weitere Informationen erhalten Sie von mir unter<br />
der nachstehenden Adresse oder von <strong>Trivadis</strong> direkt.<br />
Yann Neuhaus<br />
<strong>Trivadis</strong> SA<br />
Elisabethenanlage 9<br />
CH-4051 Basel<br />
Tel: +41 61 279 97 55<br />
Fax: +41 61 279 97 56