在 Oracle 数据库中使用实时 SQL 监控器监视 SQL 语句

这篇文章解释了如何使用实时 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 视图中保留至少一分钟。
该条目最终会被删除,以便在监视新命令时可以回收其空间。

我们可以在随附的白皮书中找到更多详细信息。

更多: zhilu jiaocheng

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 选项是并行查询的最佳选择。

日期:2020-09-17 00:11:31 来源:oir作者:oir