这篇文章解释了如何使用实时 SQL 监控来监控查询。
Oracle 11g 数据库或者更高版本具有用于监视长时间运行的 SQL 命令的新界面。
该功能称为实时 SQL 监控。
默认情况下,当 SQL 命令并行运行时,或者当它在单次执行中消耗至少 5 秒的 CPU 或者 I/O 时间时,会自动启动 SQL 监控。
MONITOR 提示还可用于为 SQL 语句打开 SQL 监视。
SQL 监控需要:
- 诊断和调整包许可证
- STATISTICS_LEVEL 参数设置为“TYPICAL”或者“ALL”
- CONTROL_MANAGEMENT_PACK_ACCESS 参数设置为“DIAGNOSTIC+TUNING”。
实时 SQL 监控功能获得了诊断和优化包的许可。
启动监视后,条目将添加到动态性能 V$SQL_MONITOR 和 V$SQL_PLAN_MONITOR 视图中。
此条目跟踪为执行收集的关键性能指标,包括已用时间、CPU 时间、读取和写入次数、I/O 等待时间和各种其他等待时间。
这些统计信息在命令执行时近乎实时地刷新,通常每秒刷新一次。
执行结束后,监控信息不会立即删除,而是在 V$SQL_MONITOR/V$SQL_PLAN_MONITOR 视图中保留至少一分钟。
该条目最终会被删除,以便在监视新命令时可以回收其空间。
我们可以在随附的白皮书中找到更多详细信息。
REPORT_SQL_MONITOR_LIST
在 Oracle 11g 第 2 版中添加了 REPORT_SQL_MONITOR_LIST 函数,以生成存储在 V$SQL_MONITOR 中的所有 SQL 的摘要。
SET LONG 1000000 SET LONGCHUNKSIZE 1000000 SET LINESIZE 1000 SET PAGESIZE 0 SET TRIM ON SET TRIMSPOOL ON SET ECHO OFF SET FEEDBACK OFF SELECT DBMS_SQLTUNE.report_sql_monitor_list(type =>'TEXT',report_level => 'ALL') AS report FROM dual;
DBMS_SQLTUNE.REPORT_SQL_MONITOR
REPORT_SQL_MONITOR 函数用于返回特定 SQL 语句的 SQL 监控报告。
可以使用各种参数来识别 SQL 语句。
该函数接受一些可选参数,最常见的是:
- SQL_ID - 感兴趣的查询的 SQL_ID。当 NULL(默认值)时,最后一个受监视的语句是目标。
- REPORT_LEVEL - 报告中显示的信息量。基本允许的值为“NONE”、“BASIC”、“TYPICAL”或者“ALL”。默认值为“TYPICAL”,这在大多数情况下就足够了。
- TYPE - 用于显示报告的格式(“TEXT”、“HTML”、“XML”或者“ACTIVE”)。 'ACTIVE' 参数是 Oracle 11g 第 2 版中的新参数,它使用 HTML 和 Flash 显示输出。需要 Internet 连接才能使用“ACTIVE”参数。
- SESSION_ID - 基于指定的 SID 定位查询的子集。对当前会话使用 SYS_CONTEXT('USERENV','SID')。默认值为 NULL。
以下是使用 REPORT_SQL_MONITOR 的示例:
SET LONG 1000000 SET LONGCHUNKSIZE 1000000 SET LINESIZE 1000 SET PAGESIZE 0 SET TRIM ON SET TRIMSPOOL ON SET ECHO OFF SET FEEDBACK OFF SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id => '', type => 'TEXT') AS report FROM dual;
要概览 V$SQL_MONITOR 中的 SQL 命令,我们可以使用:
SET LINESIZE 300 COLUMN sql_text FORMAT A100 SELECT sql_id, status, sql_text FROM v$sql_monitor;
或者我们可以使用函数 REPORT_SQL_MONITOR_LIST。
对于上面的示例,这表明有一个 SQLID 为 0tqfh0cggfg0v 的语句。
我们现在可以使用以下命令获取报告:
SET LONG 1000000 SET FEEDBACK OFF spool monitor_sql.html SELECT DBMS_SQLTUNE.report_sql_monitor(sql_id =>'0tqfh0cggfg0v',type=> 'HTML') AS report FROM dual; spool off
选项为 TEXT、HTML 或者 ACTIVE。
active 选项是并行查询的最佳选择。