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. elasticsearch oom问题分析

    背景 线上发现elasticsearch集群状态red,并且有个es节点jvm内存使用不断升高,直到gc后依然内存不够使用,服务停止.查看日志,elasticsearch出现OOM报错. [2023- ...

  2. zabbix+oracle环境部署

    oracle11安装完成后, 实例名: zbx01 oracle创建zbx01用户:col file_name for a60;set linesize 160;select file_name,ta ...

  3. Mybatis 源码2——SqlSession,执行器和一级缓存

    一丶 SqlSessionFactoryBuilder,SqlSessionFactory,sqlSession mybatis 获取sqlSession是通过SqlSessionFactory获取的 ...

  4. CUDA C编程权威指南:1-基于CUDA的异构并行计算

      什么是CUDA?CUDA(Compute Unified Device Architecture,统一计算设备架构)是NVIDIA(英伟达)提出的并行计算架构,结合了CPU和GPU的优点,主要用来 ...

  5. MySQL篇:bug2_ Navicate无法添加或更新子行-外键约束失败

    问题产生原因 Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构. 解决办法 解决方法是在Mysql中取消外键约束: SET FOREIGN_KEY_CHECKS=0; 再添加值, 然 ...

  6. 云图说|云数据库GaussDB如何做到卓越性能

    摘要:对于数据库来说,性能一直被视为最关键的部分.GaussDB作为华为自主创新研发的分布式关系型数据库,那么华为云数据库GaussDB在提升数据库性能方面都有哪些黑科技呢? 本文分享自华为云社区&l ...

  7. 即使不会node.js,拖拽就可完成数据的可视化展示

    摘要:node-red是一款基于Node.js的开源可视化界面开发工具,不需要掌握node.js而通过拖拽即可完成数据的可视化展示. 1.首先看一下node-red对数据的渲染效果 你可能认为,必须熟 ...

  8. 华为云 UCS (On-Premises):运行在您本地数据中心的CCE集群

    摘要:华为云分布式云原生UCS服务,是面向分布式云场景下的新一代云原生产品,提供UCS (Huawei Cloud).UCS (Partner Cloud).UCS (Multi-Cloud).UCS ...

  9. 论文复现丨基于ModelArts进行图像风格化绘画

    摘要:这个 notebook 基于论文「Stylized Neural Painting, arXiv:2011.08114.」提供了最基本的「图片生成绘画」变换的可复现例子. 本文分享自华为云社区& ...

  10. Codeforces Round #650 (Div. 3) F1经典离散化DP

    比赛链接:Here 1367A. Short Substrings Description 一个字符串 abac,然后把所有长度为2的子串加起来变成新串,abbaac,由 ab ba ac组成.现在给 ...