https://zhuanlan.zhihu.com/p/397834311

经常被问到查看执行计划的最佳工具是什么,对我来说,答案总是SQL Monitor(包含在 Oracle Tuning Pack 中)。如果您需要确定在执行任何长时间运行的 SQL 语句期间发生了什么,它确实是最宝贵的工具。
为了帮助您充分利用 SQL Monitor,我想与您分享我多年来从最初的数据库管理团队那里学到的一些技巧和窍门!
如何控制监视哪些语句?
1)默认情况下,将监视并行运行或在单次执行中消耗至少 5 秒的 CPU 和 I/O 组合时间的 SQL 语句。
2)还可以通过简单地向语句添加 MONITOR 提示来强制对任何 SQL 语句进行监视。
SELECT /*+ MONITOR */ col1 , col2 , col3 FROM t1 WHERE col1 = 5 ;
但是,如果您无法修改 SQL 语句,因为它是用于第三方应用程序等的。您仍然可以通过设置事件“sql_monitor”和SQL_ID列表来强制进行监视,以便在系统级。
3)更改系统设置事件'sql_monitor [sql: 5hc07qvt8v737|sql: 9ht3ba3arrzt3] force=true' ;

但是,如果您有非常大的工作负载或复杂的执行计划,您还应该注意一些额外的限制。
默认情况下,Oracle 将监控的 SQL 语句数限制为20 X CPU_COUNT。您可以通过设置下划线参数_sqlmon_max_plan来增加此限制,但请注意,这会增加 SQL Monitor 在 Shared_Pool 中使用的内存量,并可能导致 SQL Monitoring 信息更快地从内存中老化。
如果执行计划少于 300 行,SQL Monitor 只会监视 SQL 语句。如果你知道你的执行计划比这大得多,你可以设置下划线参数_sqlmon_max_planlines来增加这个限制。同样,这将增加 SQL Monitor 在 Shared_Pool 中使用的内存量。
最后,您可以通过设置下划线参数_sqlmon_threshold来降低或增加 5 秒的默认阈值。但是,您应该意识到任何增加都可能意味着受监控的执行将更快地从 SQL Monitor 缓冲区中老化。

由于这些下划线参数的副作用不太理想,我强烈建议您不要设置它们。如果您确实需要使用它们,请仅在会话级别使用。
SQL Monitor 报告在 Oracle 数据库中保留多长时间?
当 SQL Monitor 最初在 Oracle Database 11g 中引入时,生成报告所需的信息仅在动态性能视图V$SQL_MONITOR_*(大小受限的内存缓冲区)中可用,而不会持久保存到磁盘。因此,无法保证信息会在声明完成后保留一分钟以上。但实际上,它通常存在的时间更长。
如果您使用的是 11g,我强烈建议您手动保存您感兴趣的任何 SQL Monitor 报告(请参阅下面的详细信息)。
在 Oracle 数据库 12 中,c SQL Monitor 报告保存在数据字典表DBA_HIST_REPORTS 中。默认情况下,Oracle 会将 SQL Monitor 报告保留 8 天。
听起来有点熟?
它应该,因为它是 AWR 保留策略。没错,SQL Monitor 保留策略是由 AWR 策略控制的。事实上,存储在DBA_HIST_REPORTS表中的每个 SQL Monitor 报告都与一个 AWR SNAP_ID相关联。您可以使用DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS 过程更改保留策略。
注意:虽然 SQL Monitor 报告的保留由 AWR 保留策略控制,并且每个报告都有一个 关联的SNAP_ID,但是当您导出或导入相应的 AWR 数据时,不会导出或导入 SQL Monitor 报告
如何生成实时 SQL Monitor 报告?
您可以从Enterprise Manager (EM)、EM Database ExpressSQL Developer或通过命令行生成实时 SQL Monitor 报告。
在 EM Database Express 中,单击 Performance 下拉菜单中的 Performance Hub。然后单击时间线图下的受监控 SQL 选项卡。

这将打开一个窗口,其中包含当前可用的受监视 SQL 语句的列表。

单击您感兴趣的语句的SQL_ID,将为该语句自动打开 SQL 监视器报告。然后,您可以保存报告,以便稍后查看或通过单击屏幕右上角的保存图标将其发送给其他人。

如果您希望保存整个性能中心的当前内容(包括所有受监控的 SQL 语句),您可以通过单击屏幕右上角的 PerfHub 报告图标来实现。

要在 SQL Developer 中生成 SQL Monitor 报告,请转到工具菜单并单击 Real-Time SQL Monitor。

这将打开一个窗口,其中包含当前可用的受监视 SQL 语句的列表。单击您感兴趣的条目,SQL Monitor 报告将在窗口下方自动打开。您可以通过单击屏幕左上角的保存按钮来保存 SQL 监视器报告。

注意:从 SQL Developer 保存的 SQL Monitor 报告不是活动报告,而只是图像。
从 19c 开始,您可以通过调用 PL/SQL 函数DBMS_SQLTUNE.REPORT_SQL_MONITOR 或 DBMS_SQL_MONITOR在命令行上生成实时 SQL Monitor 报告。
下面的示例展示了如何使用DBMS_SQLTUNE.REPORT_SQL_MONITOR通过将“活动”设置为报告类型来生成活动报告。
SET trimspool ON SET TRIM ON SET pages 0 SET linesize 32767 SET LONG 1000000 SET longchunksize 1000000 假脱机 sqlmon_active 。html 选择dbms_sqltune 。Report_sql_monitor ( SQL_ID =&GT ; '&安培; SQL_ID' , TYPE =&GT ; '主动' ) FROM 双重; 阀芯关闭
请记住编辑生成的 sqlmon_active.html 文件以删除文件中的第一行和最后一行(假脱机关闭)。然后可以在任何浏览器中查看生成的 HTML 文件。浏览器必须连接到 OTN 才能加载活动报告代码。
当您使用该软件包时,您只会
如何在 Oracle Database 12 c 中检索历史 SQL Monitor 报告?
您可以从Enterprise Manager (EM)、EM Database Express或通过命令行查看历史或存档的 SQL Monitor 报告。
在 EM Database Express 中,在 Performance Hub 页面的 Monitored SQL 选项卡上,单击屏幕左上角时间图上方的 Select Time Period 按钮。将出现一个弹出窗口;您可以在其中选择要查看 SQL Monitor 报告的时间段。

选择您想要的时间段,然后单击“确定”。这将打开一个窗口,其中包含该时间段受监控的 SQL 语句的列表。

然后,您可以通过单击SQL_ID来查看单个 SQL 监视器报告。和以前一样,如果您想保存特定报告以供离线查看(类似于实时报告),您可以单击“保存”。
还可以通过单击 PerfHub 主页面上的 PerfHub 报告按钮来保存 PerfHub 本身的全部内容,包括单个 SQL 监视器报告。
要为单个 SQL 语句手动生成持久的 SQL Monitor 报告,您首先需要找到它的REPORT_ID,然后使用 PL/SQL 函数DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL来提取报告。
查找REPORT_ID的最简单方法是查询DBA_HIST_REPORTS并提供有关 SQL 语句及其执行时间的尽可能多的信息。
在DBA_HIST_REPORTS 中,大多数列名都是不言自明的。但是,有两列KEY1和KEY2需要一些解释,因为您至少需要使用其中之一才能找到正确的REPORT_ID。
KEY1是该语句的SQL_ID
KEY2是对语句的SQL execution_id
这是我使用的查询示例:
SELECT REPORT_ID FROM dba_hist_reports WHERE DBID = 1954845848 AND COMPONENT_NAME = 'sqlmonitor' AND REPORT_NAME = '主' AND period_start_time BETWEEN TO_DATE ('27 / 07/2017 11:00:00' , 'DD / MM / YYYY HH:MI:SS' ) AND To_date ( '27/07/2017 11:15:00' , 'DD/MM/YYYY HH:MI:SS' ) AND key1 = 'cvn84bcx7xgp3' ; REPORT_ID ========== 42
获得REPORT_ID 后,您可以使用 PL/SQL 函数DBMS_AUTO_REPORT.REPORT_REPOSITORY_DETAIL生成 SQL Monitor 报告,如下所示。
SET回波ON SET trimspool ON SET TRIM ON SET页0 SET LINESIZE 32767 SET LONG 千万 SET longchunksize百万 卷轴old_sqlmon 。html 选择dbms_auto_report 。Report_repository_detail ( rid = > ; 42 , TYPE = > ; 'active' ) FROM dual ; 阀芯关闭
请记住编辑生成的 old_sqlmon.html 文件以删除文件中的第一行和最后一行(假脱机关闭)。然后可以在任何浏览器中查看生成的 HTML 文件。浏览器必须连接到 OTN 才能加载活动报告。
是否可以为给定时间段内监视的所有 SQL 语句生成 SQL Monitor 报告?
从 Oracle Database 12c 开始,您可以使用$ORACLE_HOME/rdbms/admin目录中的perfhubrpt.sql脚本来生成给定时间段内的 PerfHub,其中将包括在此期间所有受监控 SQL 语句的 SQL Monitor 报告时期。
该脚本将提示您输入报告级别(默认为典型,但我会全部使用)、数据库 ID(默认为您所在的数据库)、实例编号(默认为您所在的实例)以及您所在的时间段有兴趣。
perfhubrpt.sql的输出是一个 html 文件,它是指定时间段内 EM 性能中心的历史视图。

单击时间线图下方的受监控 SQL 选项卡将打开一个窗口,其中包含您请求期间受监控 SQL 语句的列表。

然后,您可以通过单击任何 SQL ID 来深入查看各个报告。

[转帖]充分利用 Oracle SQL监控的更多相关文章

  1. (转帖)oracle sql 语句优化

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  2. Oracle 11g实时SQL监控 v$sql_monitor

    Oracle 11g实时SQL监控: 前面提到,在Oracle Database 11g中,v$session视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID, ...

  3. ORACLE索引监控的简单使用

    --ORACLE索引监控的简单使用-------------------------2013/11/20 说明:     应用程序在开发时,可能会建立众多索引,但是这些索引的使用到底怎么样,是否有些索 ...

  4. MS SQL 监控数据/日志文件增长

        前几天,在所有数据库服务器部署了监控磁盘空间的存储过程和作业后(MS SQL 监控磁盘空间告警),今天突然收到了两封告警邮件,好吧,存储规划是一方面,但是,是不是要分析一下是什么原因造成磁盘空 ...

  5. 《精通Oracle SQL(第2版)》PDF

    一:下载途径 二:图书图样 三:目录 第1章 SQL核心 1.1 SQL语言 1.2 数据库的接口 1.3 SQL*Plus回顾 1.3.1 连接到数据库 1.3.2 配置SQL*Plus环境 1.3 ...

  6. 采用link方式解决zabbix对于备份监控和ORACLE日志监控由于路径不统一的问题

    #对于备份监控和ORACLE日志监控由于路径不统一,我们可以采用link的方式如:#ln -s 原路径 新路径(/zabbix/logs)#新路径统一放在/zabbix/logs下具体看模板指定. # ...

  7. 《精通Oracle SQL(第2版) 》

    <精通Oracle SQL(第2版) > 基本信息 作者: (美)Karen Morton    Kerry Osborne    Robyn Sands    Riyaj Shamsud ...

  8. Python Oracle数据库监控

    有的时候无法使用Oracle自带的OEM监控,那么就需要确定一个监控方案. 此方案,使用Python+Prometheus+Grafana+Oracle 1.监控配置表 -- Create table ...

  9. 安装并使用Oracle SQL Developer访问Oracle

    ---问题 如何安装并使用Oracle SQL Developer访问Oracle. ---步骤 Oracle SQL Developer是Oracle官方出品的免费图形化开发工具,相对SQL*Plu ...

  10. Oracle SQl优化总结

    对数据库技术的热爱是我唯一的安慰,毕竟这是自己喜欢的事情,还可以做下去. 因为客户项目的需要,我又开始接触Oracle,大部分工作在工作流的优化和业务数据的排查上.为了更好的做这份工作,我有参考过or ...

随机推荐

  1. Python中numpy出现has no attribute '_no_nep50_warning'错误的一个解决方案

      本文介绍在Python中,numpy库出现报错module 'numpy' has no attribute '_no_nep50_warning'的解决方法.   一次,在运行一个Python代 ...

  2. Spring Boot整合Spring Data连接postgreSQL完成简单的CRUD操作

    导入jpa依赖和postgresql依赖: <!-- jpa依赖 --> <dependency> <groupId>org.springframework.boo ...

  3. libGDX游戏开发之按轨迹移动(十一)

    libGDX游戏开发之运动轨迹绘制(十一) libGDX系列,游戏开发有unity3D巴拉巴拉的,为啥还用java开发?因为我是Java程序员emm-国内用libgdx比较少,多数情况需要去官网和go ...

  4. 初探 Linux Cgroups:资源控制的奇妙世界

    Cgroups 是 linux 内核提供的功能,由于牵涉的概念比较多,所以不太容易理解.本文试图通过简单的描述和 Demo 帮助大家理解 Cgroups . 如果你对云原生技术充满好奇,想要深入了解更 ...

  5. 快速掌握服务网格系列二:云原生、K8S、服务网格(Service Mesh)及微服务之间的关系

    快速掌握服务网格系列二:云原生.K8S.服务网格(Service Mesh)及微服务之间的关系 首先看下CNCF对云原生的定义: Cloud native technologies empower o ...

  6. 关于Triple DES(3DES)对称加密算法

    一.引言 在网络安全领域,对称加密算法作为一种常见的加密手段,被广泛应用于保障数据传输的保密性和完整性.其中,DES(Data Encryption Standard)算法作为一种经典的对称加密算法, ...

  7. Flutter Getx 状态管理 --- (依赖管理) GetxController

    Flutter Getx 简单的状态管理(依赖管理) GetxController Getx 依赖管理简介 Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Contr ...

  8. 使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能

    本文分享自华为云社区<使用 UCS(On-Premises) 管理您的GPU资源池,释放AI大模型算力潜能>,作者:云容器大未来. AI 技术现状及发展趋势 过去十余年,依托全球数据.算法 ...

  9. 揭开KPI异常检测顶级AI模型面纱

    摘要:2020GDE全球开发者大赛-KPI异常检测告一段落,来自深圳福田莲花街道的"原子弹从入门到精通"有幸取得了总榜TOP1的成绩,在这里跟大家分享深圳福田莲花街道在本次比赛的解 ...

  10. 一文搞定Matplotlib 各个示例丨建议收藏

    摘要:Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用 ,Matplotlib也是深度学习的常用绘图库,主要是将训练的成果进行图形化,因为这样更直观,更方便发现训练中的 ...