DBAtlas · 数据库运维图谱

获取 SQL Monitor 报告(正在运行或已完成的长 SQL)

Oracle性能

命令

-- 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

作用

Real-Time SQL Monitoring 针对长时间运行或并行 SQL 执行计划的每一步,显示实际行数、耗时、内存/temp 使用和 ASH 活动;可在 SQL 仍在运行时观察进度。

适用场景

判断批处理/报表查询是否卡住以及还剩多少、分析并行查询分布(PX skew),以及找出估算行数(E-Rows)与实际行数之间的差距时。

注意

需要 Tuning Pack 许可(以 Diagnostics Pack 为前提)。默认只监控消耗 5 s CPU/I-O 或并行运行的 SQL;其他 SQL 请使用 /*+ MONITOR */ hint。非常大的计划(_sqlmon_max_planlines,默认 300)不会被监控。条目只在内存中保留有限时间;在 12c+ 中较早的报告也可从 DBA_HIST_REPORTS 获取。

在 DBAtlas 中打开 →

相关内容