14.12.2012 Aufrufe

Oracle Performance-Analyse mit TVD$stat / D - Trivadis

Oracle Performance-Analyse mit TVD$stat / D - Trivadis

Oracle Performance-Analyse mit TVD$stat / D - Trivadis

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!