Sql monitor介绍使用

来源:这里教程网 时间:2026-03-03 22:43:11 作者:

SQL Monitor 是 Oracle 数据库(从 11g 开始引入并持续增强)内置的一项 实时性能诊断和监控 功能。它是 Real-Time SQL Monitoring 功能的核心组成部分。它的主要目的是提供正在执行的长时运行或资源密集型 SQL 语句的 实时、详细执行计划和运行时统计信。   D BA  

  1. 实时监控:

  2. 这是 SQL Monitor 最核心的优势。它允许你在 SQL 语句 运行时就监控其执行细节,而不需要等到语句执行完毕(如使用  DBMS_XPLAN 或 AWR/ASH 报告是事后分析)。
  3. 对于长时间运行的语句(如报表、批量加载、复杂分析查询),这提供了极大的便利性。
  4. 自动激活:

  5. SQL Monitor 通常是自动启用的,无需用户干预,只要 SQL 语句满足以下任一条件:
  6. 启用了并行执行 ( PARALLEL Hint 或对象并行度 > 1)
  7. 单次执行预计总耗时超过 5 秒(由优化器估算)
  8. 消耗了显著的 CPU 或 I/O 资源(由内部阈值决定)
  9. 使用了  MONITOR 或  NO_MONITOR Hint 显式控制( /*+ MONITOR */ /  /*+ NO_MONITOR */)
  10. 一旦激活,监控信息会持续收集直到语句执行完成(或超时)。
  11. 可视化执行计划:

  12. SQL Monitor 报告的核心是一个 图形化(在 EM 中)或结构化文本(在报告中)的执行计划
  13. 与传统  EXPLAIN PLAN 或  DBMS_XPLAN.DISPLAY_CURSOR 不同,它展示的是 实际正在使用的执行计划及其在运行时的状态。
  14. 丰富的运行时统计信息:

  15. 在每个执行计划的操作上(如  TABLE ACCESS,  HASH JOIN,  SORT GROUP BY 等),SQL Monitor 提供关键的运行时指标:
  16. 进度: 执行完成了多少(百分比)。
  17. 实际行数 (A-Rows): 该操作实际输出的行数。
  18. 预估行数 (E-Rows): 优化器当初预估该操作输出的行数(便于发现预估偏差)。
  19. 已处理行数: 该操作处理的总行数(可能包括过滤或连接条件丢弃的行)。
  20. 时间: 该操作消耗的数据库时间 ( DB Time) 和 CPU 时间。
  21. 内存使用: 该操作使用的 PGA 内存(如  HASH JOIN 的哈希区大小)。
  22. I/O: 物理读 ( Disk Reads) 和逻辑读 ( Buffer Gets)。
  23. 并行执行: 如果启用了并行,会显示并行服务器进程 ( PX) 的数量、它们之间的数据分布方式 ( DOP - Degree of Parallelism) 以及并行协调器 ( QC) 的状态。
  24. 等待事件: 该操作遇到的关键等待事件(如  db file sequential/scattered read,  direct path read/write,  enq: TM - contention 等)及其等待时间。
  25. 绑定变量值: 如果使用了绑定变量,报告通常会显示执行时使用的实际值(对诊断计划选择问题至关重要)。

接下来介绍几种获取该报表的方式:

一、 sqlplus 中查看:

SET LONG 1000000
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET PAGES 999
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => 'your_sql_id') AS report FROM dual;

二、拉取 HTML 的形式查看:

1 、使用 Oracle Enterprise Manager (OEM):

登录到 OEM 控制台。

导航到 性能 ” -> “SQL Monitor”

SQL Monitor 页面,找到你想要查看的报告。

点击报告旁边的 查看报告 或类似的按钮。

选择 “HTML” 格式,然后点击 生成报告

报告生成后,你可以选择保存或直接在浏览器中查看

2 、使用 SQL Developer:

SQL Developer 中,连接到你的数据库。

导航到 性能 标签页。

“SQL Monitor” 部分,找到你想要查看的报告。

右键点击报告,选择 查看报告

SQL Developer 会显示 HTML 格式的报告。

3 、使用 SQL 命令 :

你可以使用 DBMS_SQLTUNE.REPORT_SQL_MONITOR 函数来获取 HTML 格式的报告。首先,你需要知道 SQL 语句的 SQL ID

使用以下 SQL 命令来生成 HTML 报告:

SET LONG 1000000
SET PAGES 999
SET LONGCHUNKSIZE 1000000
SET LINESIZE 1000
SET TRIMSPOOL ON
SPOOL sql_monitor_report.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(sql_id => 'your_sql_id', type => 'HTML') AS report FROM dual;
SPOOL OFF

执行上述命令后,报告将被保存到当前工作目录下的 sql_monitor_report.html 文件中。

相关推荐