Langlaufende Operationen, SQL Monitoring (auch Real-time Monitoring) und Active Reports
von Ulrike Schwinn, ORACLE Deutschland GmbH
Das Monitoring der Datenbank ist für Datenbankadministratoren wie auch für Datenbankentwickler ein wichtiger Bestandteil
ihrer Aufgaben - besonders auch in Zeiten von Ressource-Engpässen bzw.
Performanceproblemen. Speziell beim Testen von neuen Anwendungen, neuen Techniken oder Features ist das Monitoring ein
wichtiger Schritt im Testablauf.
Die Datenbank selbst stellt ein eigenes Framework zur Verfügung, um ohne Verwendung von externen Werkzeugen und
ohne zusätzliche Installation ein genaues Monitoring zu erlauben. Das Framework umfasst seit jeher spezielle Data
Dictionary Views, V$-Tabellen, PL/SQL-Packages für verschiedene Advisory-Aufgaben und ein spezielles Workload
Repository. In jedem neuen Datenbankrelease wächst der Funktionsumfang dieses Frameworks - so auch in Oracle Database 11g mit
Real-time Monitoring (auch SQL Monitoring ) und den Active Reports. Viele dieser Funktionen sind mittlerweile graphisch in der
Enterprise Manager Database Control Konsole oder im aktuellen Grid Control implementiert, so dass die
Nutzung sehr einfach und intuitiv ist.
In diesem Tipp konzentrieren wir uns auf die langlaufenden Transaktionen, das Real-time Monitorung und die Active Reports. Dabei
werden folgende Techniken benutzt:
- V$SESSION_LONGOPS
- DBMS_APPLICATION_INFO
- V$SQL_MONITOR
- DBMS_SQLTUNE
- Enterprise Manager Database Control und Grid Control
Monitoring von langlaufenden Operationen mit V$SESSION_LONGOPS
Monitoring von langlaufenden Operationen ist schon seit langer Zeit über die View V$SESSION_LONGOPS möglich. Bestimmte
Oracle- oder Benutzer- definierte Operationen wie SELECT, DDL-, DML-, oder auch RMAN- oder DATAPUMP- Kommandos gehören
zu diesen Operationen. Laut Oracle Database Reference Handbuch werden diese Operationen nach Ablauf von 6 Sekunden in der View als
langlaufende Operationen angezeigt.
Folgendes Beispiel zeigt eine einfache Anwendung.
Ab Oracle 10g wird auch eine vom User ausgeführte ROLLBACK-Operation nach einer
langlaufenden DML-Operation in V$SESSION_LONGOPS mitgeloggt. Folgendes Beispiel zeigt die
Zeitdauer der ROLLBACK-Operation in Sekunden.
Das Ergebnis zeigt, dass gerade eine DBMS_STATS- Operation aktiv ist und in ungefähr 4 Sekunden (siehe Spalte TIME_REMAINING)
beendet ist. Mit dem Package DBMS_APPLICATION_INFO ist es darüberhinaus sogar möglich, die Spalten der View für
Benutzer geschriebene Module selbst zu bestimmen. Speziell das Unterprogramm SET_SESSION_LONGOPS des Packages
DBMS_APPLICATION_INFO fügt eine Zeile in die View V$SESSION_LONGOPS ein, um den Fortschritt einer Operation festzulegen.
Folgender Beispielausschnitt zeigt die Verwendung.
Die Argumente OP_NAME, TARGET, CONTEXT, SOFAR, TOTALWORK, TARGET_DESC und UNITS geben die Inhalte der generierten Zeile
von V$SESSION_LONGOPS vor. Das Argument für RINDEX wird mit einem Aufruf von DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS_NOHINT
gefüllt und dient als "Row Index" für die Zeile. Das Argument SLNO ist nur für den internen Gebrauch vorgesehen
und wird nicht gesetzt.
Die Ergebnisabfrage auf V$SESSION_LONGOPS sieht dann folgendermassen aus:
In unserem Beispiel wird die Spalte MESSAGE der View V$SESSION_LONGOPS aus den Argumenten von OP_NAME,
TARGET_DESC und UNITS von SET_SESSION_LONGOPS aus den Werten im Listing zusammengesetzt. SOFAR und TOTALWORK setzen
sich aus der Zählervariable L_LOOPCNT und den Werten von L_COUNT der Applikation zusammen. Alle Informationen sind
frei wählbar und werden nicht überprüft, so dass der Informationsgehalt abhängig von der
eigenen Definition dieser Spalten ist. Eine genaue Beschreibung der Prozedur SET_SESSION_LONGOPS
findet sich im Handbuch unter SET_SESSION_LONGOPS Procedure.
SQL Monitoring in 11g
Häufig stellen sich allerdings folgende Fragen, die über die Funktion von V$SESSION_LONGOPS hinausreichen:
- Wie kann man alle SQL Statements mit hohen Antwortzeiten finden?
- Welche Operationen dieser SQL Abfragen sind zeitintensiv?
- Welche Statements laufen parallel?
- Können die Statements auch in Echtzeit (real-time) überwacht werden?
Mit der Einführung von 11g steht nun das SQL Monitoring (auch Real-time Monitoring) Feature zur Verfügung, das im Linemode oder auch
graphisch Verwendung findet. Die Linemode-Implementierung nutzt die neuen Views V$SQL_MONITOR und V$SQL_PLAN_MONITOR
und für das Reporting die Funktion REPORT_SQL_MONITOR des Package DBMS_SQLTUNE. Das SQL Monitoring wird dabei automatisch
gestartet, wenn ein SQL-Statement eine der folgenden Voraussetzungen erfüllt:
- parallele Ausführung
- Verbrauch von mehr als 5 Sekunden CPU bzw. I/O Zeit
- Verwendung des MONITOR Hints
Wichtiger Hinweis: Für die Verwendung ist das Tuning Pack notwendig.
Das folgende Listing zeigt eine einfache Anwendung der neuen Views.
So lange das Statement ausgeführt wird, werden die Statistiken (fast) in Echtzeit erneuert. Die Informationen werden
danach nicht direkt aus V$SQL_MONITOR gelöscht sondern noch einige Zeit gespeichert.
Möchte man den Report im Linemode erzeugen, ist dies mit folgender Abfrage möglich. Das Ergebnis ist ein HTML-Report,
der sich im Browser anzeigen lässt.
Da sich die Informationen im Report ständig ändern, ist die Anzeige in einem graphischen Werkzeug wie Enterprise Manager
Database Control oder Grid Control mit automatischem oder manuellem Refresh einfacher als die Verwendung der gerade
gezeigten Linemode-Variante. Der folgende Screenshot zeigt eine Übersicht der überwachten Statements im Enterprise Manager Database Control 11g
Release 2. Über den Reiter "Performance" und den Link "SQL Monitoring" gelangt man zu folgender Ansicht:
Für eine größere Ansicht auf das Bild klicken.
Ein einfacher Blick auf die entsprechende Enterprise Manager Seite reicht offensichtlich aus,
um erste wichtige Informationen über die kostenintensiven Statements zu erhalten. Die Spalte "Status"
zeigt dabei an, ob ein Statement noch aktiv (Zeile 1 bis 4) ist, beendet
(Zeile 6 bis 8) wurde, abgebrochen (Zeile 5) worden ist oder bei
Einstellung des Parameters PARALLEL_DEGREE_POLICY in einer Queue (Zeile 1 und 3) wartet
(siehe Tipp zu Parallel Query ganz automatisch mit Oracle 11g.).
Nicht nur reine SQL-Cursor, sondern die Ausführung jedes beliebigen Cursors kann seit 11g Release 2 überwacht werden.
Dies schliesst auch PL/SQL- Aufrufe mit ein. Die letzte Zeile zeigt beispielsweise
die Ausführung eines anonymen PL/SQL- Blocks. Wie bei einem SQL-Statement, werden in diesem Teil des Reports nur generelle
Informationen und Statistiken über die Ausführung angezeigt.
Mehr Details über Active Reports
Wie erhalte ich nun weitere Informationen über die Ausführungen? Mit der rechten Maustaste erhält
man ein spezielles Kontextmenü (siehe "Monitored SQL Execution Details") mit dem weitere Details z.B. - die sogenannten
Active Reports für SQL Monitoring - angezeigt werden können.
Für eine größere Ansicht auf das Bild klicken.
Active Reports sind eine neue Art
von interaktiven Reports, die über die Enterprise Manager Oberfläche oder im Linemode genutzt werden können.
Es existieren Active Reports zu SQL Monitoring, SQL Detail Monitoring und dem SQL Performance Analyzer.
SQL Monitoring- und SQL Performance Analyzer- Reports sind in der Enterprise Manager Database Control Konsole 11g Release 2 und im
Grid Control Release 11g automatisch integriert. Der folgende Screenshot gibt einen Überblick
über die Funktionen.
Für eine größere Ansicht auf das Bild klicken.
Auf den ersten Blick fällt auf, dass der Report einen Überblick über die allgemeinen Informationen wie
Warte-, Zeit- und I/O Statistiken gibt. Das kleine blaue Symbol neben der "SQL ID" gibt Informationen
zum verwendeten SQL- und PL/SQL-Text und den verwendeten Bindvariablen. Speichern lässt sich der
HTML-Report mit dem Button "Save". Sofern die Mail-Einstellungen wie Mail-Server, Emailadresse usw.
über "Setup" und "Preferences" (unter "Notification Methods") korrekt eingetragen worden sind, ist
sogar zusätzlich ein Versenden des Reports möglich. Zum Ansehen des Reports ist dabei keine Installation
des Enterprise Managers notwendig. Mit "View Report" wird der Report im ASCII-Format angezeigt.
Im Bereich "Details" können nun weitere Informationen und Statistiken eingesehen werden. Standardmässig
werden die Operationen der Planausführung und zusätzliche Informationen wie CPU- oder Memory- Verbrauch pro
Operation angezeigt. Damit wird deutlich, welche Operationen hohe Kosten verursachen.
Unter "Activity" werden der CPU-Verbrauch und die aufgetretenen Wait Events aufgelistet. In unserem Fall werden hauptsächlich "direct path write temp" Wait Events
angezeigt, was durch eine hohe Sortierungsrate des ausgeführten Statements verursacht werden kann.
Eine weitere Analyse ist sicher notwendig. Je nach Statement-Ausführung sind sogar zusätzliche Buttons
mit Informationen zur Parallelisierung verfügbar. Der nächste Screenshot zeigt
den entsprechenden Ausschnitt in der Enterprise Manager Konsole.
Für eine größere Ansicht auf das Bild klicken.
Bei PL/SQL- Ausführungen steht nur der Button "Activity" zur Verfügung.
Die "Activity" wird durch die Angabe eines entsprechenden Typs wie CPU, Wait Event oder SQL ID festgelegt.
Falls ein SQL Statement beispielsweise aktiv ist, wird die entsprechende SQL ID angegeben. Ein Drilldown
ermöglicht das Anzeigen der zugehörigen SQL Informationen.
Für eine größere Ansicht auf das Bild klicken.
In unserem Beispiel handelt es sich beispielsweise um zwei INSERT-Statements, wobei das
zweite Statement offensichtlich die meisten Ressourcen verwendet. Möchte man eine genauere
Analyse des PL/SQL Codes durchführen, sollte man den zusätzlichen Einsatz des
Hierachischen PL/SQL Profilers in Betracht ziehen.
Nutzt man Grid Control 11g, wird man weitere Buttons im Bereich Details vorfinden.
Hilfreich kann beispielsweise der Button "Plan" sein, wie die nächsten beiden Screenshots
zeigen.
Für eine größere Ansicht auf das Bild klicken.
Für eine größere Ansicht auf das Bild klicken.
Active Reports können ähnlich wie die Real-time Monitoring Reports mithilfe des Package DBMS_SQLTUNE
im Linemode erzeugt werden. Wer sich damit auseinander setzen möchte, kann sich die ausführlichen
Informationen auf OTN (siehe nächster Abschnitt) dazu ansehen.
Informationen und verwendete Links
Mehr zu diesem Thema bzw. zu weiteren Themen rund um die Datenbank lesen Sie in den nächsten Ausgaben ...
Zurück zur Community-Seite
|