X

Technologie - Trends - Tipps&Tricks
in deutscher Sprache

SQL Monitoring Berichte einfach generieren im Linemode

Vor einigen Wochen bekam ich wieder eine Anfrage zur  Beurteilung von SQL Performance. Ein Kollege fragte mich, ob ich ihm beim Tuning von SQL Statements behilflich sein könnte. Die Statements würden so langsam laufen und er wüßte keinen Rat. Er fragte mich, welche Informationen, ich benötigte, da ich keinen Zugriff auf die Umgebung hatte. Das ist nun ein typischer Fall für real-time SQL Monitoring! 

Folgende Abschnitte sollen kurz die Funktionsweise demonstrieren, eine umfangreichere Beschreibung findet man im Blogposting von 2019

Was ist noch einmal real-time Montoring? Wie kann man ohne großes Vorwissen einen Report erzeugen? Welche Voraussetzungen benötigt man dazu?

Real-time Monitoring ist ein geeignetes Hilfsmittel um zuverlässig einen detaillierten Überblick über SQL- und PL/SQL-Statistiken von Operationen zu bekommen. Sowohl Cursor-Statistiken (z.B. CPU-Zeiten und IO-Zeiten) als auch Ausführungsplan-Statistiken (z.B. Anzahl der Zeilen, Speicher und belegter Temp Space) werden während der Ausführung der Anweisung nahezu in Echtzeit aktualisiert. Dabei werden nicht nur die gerade aktiven Operationen überwacht, sondern auch Abfragen, die sich in einer Warteschlange befinden oder gar abgebrochen worden sind. 

Real-time Monitoring findet sich in den graphischen Konsolen vom Enterprise Manager Cloud Control, im SQL Developer oder aber auch in der Cloud Konsole von Autonomous Database. Dort besteht die Möglichkeit einen Report einfach zu sichern und somit an einen Experten  weiterzugeben. Möchte man allerdings unabhängig von graphischen Konsolen im Linemode arbeiten, reicht in der Regel ein Aufruf einer entsprechenden Funktionen aus dem Package DBMS_SQLTUNE aus, um übersichtliche Reports zu erstellen.

Welche Voraussetzungen benötigt man dazu? Real-time Monitoring ist Teil des Tuning Packs.  Die Kontrolle über den Einsatz der Management Packs kann man mit dem Initialisierungsparameter CONTROL_MANAGEMENT_PACK_ACCESS sicher stellen. Der Wert DIAGNOSTIC+TUNING ermöglicht den Einsatz der Tuning Pack-Funktionen. Zusätzlich muss der Parameter STATISTICS_LEVEL den Wert TYPICAL (Defaultwert) haben.
Hinweis: In Datenbank Cloud Umgebungen sind Tuning und Diagnostics Pack schon in der Enterprise Edition enthalten.

Was ist eigentlich Real-time SQL Monitoring? Ein SQL-Monitoring wird immer automatisch gestartet, falls die Operationen eine der folgenden Voraussetzungen erfüllen:

  • Parallele Ausführung
  • Verbrauch von mehr als 5 Sekunden CPU- bzw. I/O-Zeit
  • Verwendung des MONITOR-Hints

Kein umständliches Einschalten beispielsweise durch Setzen eines speziellen Trace Events ist zur Nutzung erforderlich.

Möchte man einen Report im Linemode erstellen, gibt es nun die Möglichkeit, mit den Funktionen REPORT_SQL_MONITOR_LIST und REPORT_SQL_MONITOR des Package DBMS_SQLTUNE zu arbeiten. Dabei ist eine Darstellung in unterschiedlichen Formaten möglich wie z.B. Text (das Defaultformat), HTML oder auch ACTIVE für interaktive Reports, die auf der Flash Player-Funktionalität von Adobe basieren. Die Einstellung ACTIVE ist dabei ein "interaktiver" Datenbank Bericht, der die meisten Informationen graphisch zeigt, wie zum Beispiel auch explain plan Darstellung, Metriken usw.

Folgendes Beispiel erzeugt eine Liste der langlaufenden Statements. Es ist ein HTML Report und der Detaillierungsgrad des Berichts ist ALL, was so viel bedeutet wie alle Informationen.

Hinweis: Seit Oracle Database 19c können sogar User ohne SELECT_ANY_CATALOG Rolle die Funktionen benutzen. In diesem Fall werden nur die User eigenen Statements gelistet.

SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 1000
SET PAGESIZE 0
SET TRIM ON TRIMSPOOL ON
SET ECHO OFF FEEDBACK OFF

spool monitor_list.html rep

SELECT 
dbms_sqltune.report_sql_monitor_list(type =>'html', report_level => 'ALL')     
AS report FROM dual;

spool off

Der zugehörige Report sieht dann folgendermaßen aus. Nur die beiden Ausführungen des Users DEV sind hier gelistet.

Eine genauere Detailansicht gibt es über folgenden Aufruf. Möchte man ein bestimmtes Statement anzeigen, kann man dies mit SQL_ID im Aufruf mitangeben. Ohne Angabe einer SQL_ID, wie in unserem Fall, wird nur die zuletzt ausgeführte Operation im Detail angezeigt.

SET LONG 1000000 LONGCHUNKSIZE 1000000 LINESIZE 1000 
SET PAGESIZE 0 
SET TRIM ON TRIMSPOOL ON 
SET ECHO OFF FEEDBACK OFF 

spool monitor_sql.html rep

select dbms_sqltune.report_sql_monitor(type=>'html') from dual;

spool off

Der zughörige HTML Report sieht dann wie folgt aus.

Die gleiche Abfrage ausgeführt mit dem User SYS zeigt übrigens die Ausführung von allen Usern mit langlaufenden Abfragen.

Weitere Informationen

Be the first to comment

Comments ( 0 )
Please enter your name.Please provide a valid email address.Please enter a comment.CAPTCHA challenge response provided was incorrect. Please try again.