ITPub博客

首页 > 数据库 > Oracle > Sql monitor的介绍和使用

Sql monitor的介绍和使用

原创 Oracle 作者:a960549548 时间:2026-07-14 15:28:54 0 删除 编辑

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

  1. 实时监控:

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

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

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

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

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

一、 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 文件中。

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70013625/viewspace-3175906/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
Oracle ACE,MySQL 8.0 OCP,PMP,拥有OceanBase OBCP,TiDB PCTP,GoldenDB GDCP等多项认证,ITPUB认证专家,微信公众号:DBA之友。

注册时间:2022-02-08

  • 博文量
    132
  • 访问量
    171498