[转帖]充分利用 Oracle SQL监控
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 Express、SQL 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监控的更多相关文章
- (转帖)oracle sql 语句优化
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- Oracle 11g实时SQL监控 v$sql_monitor
Oracle 11g实时SQL监控: 前面提到,在Oracle Database 11g中,v$session视图增加了一些新的字段,这其中包括SQL_EXEC_START和SQL_EXEC_ID, ...
- ORACLE索引监控的简单使用
--ORACLE索引监控的简单使用-------------------------2013/11/20 说明: 应用程序在开发时,可能会建立众多索引,但是这些索引的使用到底怎么样,是否有些索 ...
- MS SQL 监控数据/日志文件增长
前几天,在所有数据库服务器部署了监控磁盘空间的存储过程和作业后(MS SQL 监控磁盘空间告警),今天突然收到了两封告警邮件,好吧,存储规划是一方面,但是,是不是要分析一下是什么原因造成磁盘空 ...
- 《精通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 ...
- 采用link方式解决zabbix对于备份监控和ORACLE日志监控由于路径不统一的问题
#对于备份监控和ORACLE日志监控由于路径不统一,我们可以采用link的方式如:#ln -s 原路径 新路径(/zabbix/logs)#新路径统一放在/zabbix/logs下具体看模板指定. # ...
- 《精通Oracle SQL(第2版) 》
<精通Oracle SQL(第2版) > 基本信息 作者: (美)Karen Morton Kerry Osborne Robyn Sands Riyaj Shamsud ...
- Python Oracle数据库监控
有的时候无法使用Oracle自带的OEM监控,那么就需要确定一个监控方案. 此方案,使用Python+Prometheus+Grafana+Oracle 1.监控配置表 -- Create table ...
- 安装并使用Oracle SQL Developer访问Oracle
---问题 如何安装并使用Oracle SQL Developer访问Oracle. ---步骤 Oracle SQL Developer是Oracle官方出品的免费图形化开发工具,相对SQL*Plu ...
- Oracle SQl优化总结
对数据库技术的热爱是我唯一的安慰,毕竟这是自己喜欢的事情,还可以做下去. 因为客户项目的需要,我又开始接触Oracle,大部分工作在工作流的优化和业务数据的排查上.为了更好的做这份工作,我有参考过or ...
随机推荐
- Pikachu漏洞靶场 (SSRF服务端请求伪造)
SSRF(Server-Side Request Forgery:服务器端请求伪造) curl 点击 累了吧,来读一首诗吧 url是这样的: http://192.168.171.30/pikachu ...
- QRCoder1.4.3生成二维码,不依赖System.Drawing,解决"未能找到类型或命名空间名QRCode","及ImageFormatPng仅在windows上受支持"
生成二维码1(简单) 包引用: <PackageReference Include="QRCoder" Version="1.4.3" /> usi ...
- pyecharts 保存图表至本地
pip install snapshot-selenium from pyecharts.render import make_snapshot from snapshot_selenium impo ...
- Mybatis源码3 CachingExecutor, 二级缓存,缓存的实现
Mybatis CachingExecutor, 二级缓存,缓存的实现 一丶二级缓存概述 上一章节,我们知道mybaits在构造SqlSession的时候,需要让SqlSession持有一个执行器,如 ...
- Boost Your Strategy With The Content Marketing Tools
Boost Your Strategy With The Content Marketing Tools In today's digital landscape, content marketing ...
- 理论+实践,揭秘昇腾CANN算子开发
摘要: 本文介绍了CANN自定义算子开发的几种开发方式和算子的编译运行流程.然后以开发一个DSL Add算子为例,讲解算子开发的基本流程. 本文分享自华为云社区<昇腾CANN算子开发揭秘> ...
- 一个合格的CloudNative应用:程序当开源软件编写,应用配置外置
摘要:对于一个合格的CloudNative应用,应该把自己的程序当做开源软件来编写的,不该将数据库连接信息和密码放在代码里,一定要将配置外置. 对于一个合格的CloudNative应用,应该把自己的程 ...
- 洞见商业新机,云原生数据库GaussDB让企业决策更科学
摘要:华为云GaussDB(for Redis)为数位科技打造了一个稳定可靠.高效安全.卓越性能的大数据引擎,KV存储降本80%,助力实体企业数字化转型之路走的更加稳健. 本文分享自华为云社区< ...
- 云小课 | DSC:快速识别敏感数据并脱敏
阅识风云是华为云信息大咖,擅长将复杂信息多元化呈现,其出品的一张图(云图说).深入浅出的博文(云小课)或短视频(云视厅)总有一款能让您快速上手华为云.更多精彩内容请单击此处. 摘要: 华为云数据安全中 ...
- 华为云企业级Redis揭秘第15期:Redis为什么需要强一致?
摘要:其实开源Redis的弱一致性已经不满足很多应用场景的诉求.怎么,不信? 本文分享自华为云社区<华为云企业级Redis揭秘第15期:Redis为什么需要强一致?>,作者: GaussD ...