[转帖]充分利用 Oracle SQL监控

充分利用,oracle,sql,监控 · 浏览次数 : 0

小编点评

**数据库性能分析工具** 该工具可用于对 Oracle Database 12c 中的 SQL 语句进行性能分析,包括: * **SQL Monitor**:可用于监视 SQL 语句的执行过程,包括执行时间、语句名称、数据库名等。 * ****Auto****:可用于自动生成 SQL Monitor 报告,包括执行过程、语句名称、数据库名等。 * ****Report Repository Detail****:可用于生成详细的 SQL Monitor 报告,包括执行过程、语句名称、数据库名等。 **生成报告工具** * ****Performance Hub****:可用于生成 EM 性能中心的历史视图,包括 SQL 语句的执行过程、性能指标等。 * ****SQL****:可用于生成自定义 SQL 报告,包括执行过程、语句名称、数据库名等。 **操作步骤** 1. **启动**工具,例如**Performance Hub** 或**SQL**。 2. **设置**工具,例如**SQL Monitor** 或**Auto**。 3. **选择**要生成的报告,例如**SQL Monitor** 或**Performance Hub**。 4. **启动**工具,以生成报告。 5. **查看**生成的报告。 **报告内容** * **SQL Monitor** 报告:可用于监视 SQL 语句的执行过程,包括执行时间、语句名称、数据库名等。 * ****Auto**** 报告:可用于自动生成 SQL Monitor 报告,包括执行过程、语句名称、数据库名等。 * ****Report Repository Detail** 报告:可用于生成详细的 SQL Monitor 报告,包括执行过程、语句名称、数据库名等。 * ****Performance Hub** 报告:可用于生成 EM 性能中心的历史视图,包括 SQL 语句的执行过程、性能指标等。 * ****SQL** 报告:可用于生成自定义 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 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监控相似的内容:

[转帖]充分利用 Oracle SQL监控

https://zhuanlan.zhihu.com/p/397834311 经常被问到查看执行计划的最佳工具是什么,对我来说,答案总是SQL Monitor(包含在 Oracle Tuning Pack 中)。如果您需要确定在执行任何长时间运行的 SQL 语句期间发生了什么,它确实是最宝贵的工具。

[转帖]vm overcommit参数

https://www.cnblogs.com/ExMan/p/11586756.html overcommit参数需要根据不同服务来进行调整,使内存得到充分利用的同时保证系统的稳定性。比如redis服务器建议把vm.overcommit_memory设置为1. 1、vm.overcommit_ra

[转帖]Nginx Ingress 高并发实践

概述 Nginx Ingress Controller 基于 Nginx 实现了 Kubernetes Ingress API,Nginx 是公认的高性能网关,但如果不对其进行一些参数调优,就不能充分发挥出高性能的优势。之前我们在 Nginx Ingress on TKE 部署最佳实践 一文中讲了

[转帖]阿里达摩院最新存算芯片技术解读

https://zhuanlan.zhihu.com/p/448261354 12月3日,阿里达摩院成功研发新型架构芯片,已经被证明能够在阿里推荐系统中发挥极大的应用价值,并受到技术圈的普遍关注。 据悉这颗芯片与数据中心的推荐系统对于带宽/存储的需求完美匹配,大幅提升带宽的同时还实现了超低功耗,充分

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、

[转帖]Redis 7 参数 修改 说明

2022-06-16 14:491800原创Redis 本文链接:https://www.cndba.cn/dave/article/108066 在之前的博客我们介绍了Redis 7 的安装和配置,如下: Linux 7.8 平台 Redis 7 安装并配置开机自启动 操作手册https://ww

[转帖]HTTPS中间人攻击原理

https://www.zhihu.com/people/bei-ji-85/posts 背景 前一段时间,公司北京地区上线了一个HTTPS防火墙,用来监听HTTPS流量。防火墙上线之前,邮件通知给管理层,我从我老大那里听说这个事情的时候,说这个有风险,然后意外地发现,很多人原来都不知道HTTPS防

[转帖]关于字节序(大小端)的一点想法

https://www.zhihu.com/people/bei-ji-85/posts 今天在一个技术群里有人问起来了,当时有一些讨论(不完全都是我个人的观点),整理一下: 为什么网络字节序(多数情况下)是大端? 早年设备的缓存很小,先接收高字节能快速的判断报文信息:包长度(需要准备多大缓存)、地