DBAtlas · Atlas für Datenbankbetrieb

SQL-Monitor-Report abrufen (laufende oder abgeschlossene lange SQL)

OraclePerformance

Befehl

-- List monitored SQL (longer than 5 s, parallel, or /*+ MONITOR */):
SELECT sql_id, status, username, sql_exec_id,
       TO_CHAR(sql_exec_start,'YYYY-MM-DD HH24:MI:SS') AS exec_start,
       ROUND(elapsed_time/1e6,1) AS elapsed_s,
       ROUND(cpu_time/1e6,1)     AS cpu_s,
       buffer_gets, px_servers_allocated
FROM   v$sql_monitor
ORDER  BY sql_exec_start DESC
FETCH FIRST 20 ROWS ONLY;

-- TEXT report (actual rows, time and activity per plan line):
SET LONG 10000000 LONGCHUNKSIZE 10000000 LINESIZE 300 PAGESIZE 0 TRIMSPOOL ON
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
         sql_id       => '<sql_id>',
         type         => 'TEXT',
         report_level => 'ALL') AS report
FROM   dual;

-- Shareable HTML (interactive in a browser):
SPOOL /tmp/sqlmon_<sql_id>.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
         sql_id => '<sql_id>', type => 'ACTIVE', report_level => 'ALL')
FROM   dual;
SPOOL OFF

Was es tut

Real-Time SQL Monitoring zeigt für jeden Schritt des Ausführungsplans einer lang laufenden oder parallelen SQL die tatsächlichen Zeilen, die Laufzeit, Speicher-/Temp-Nutzung und ASH-Aktivität; du kannst den Fortschritt verfolgen, während die SQL noch läuft.

Wann einsetzen

Bei der Frage, ob eine Batch-/Report-Abfrage hängt und wie viel noch fehlt, für die Analyse der Parallel-Query-Verteilung (PX Skew) und um Abweichungen zwischen geschätzten (E-Rows) und tatsächlichen Zeilen zu finden.

Vorsicht

Erfordert die Tuning-Pack-Lizenz (Diagnostics Pack ist Voraussetzung). Standardmäßig wird nur SQL überwacht, die 5 s CPU/I-O verbraucht oder parallel läuft; für andere nutze den Hint /*+ MONITOR */. Sehr große Pläne (_sqlmon_max_planlines, Standard 300) werden nicht überwacht. Einträge bleiben nur begrenzte Zeit im Speicher; ab 12c sind ältere Reports auch über DBA_HIST_REPORTS verfügbar.

In DBAtlas öffnen →

Verwandte Einträge