百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

[ORACLE],SQL性能报告(AWR)导出,扶你走上调优大神之路

sinye56 2024-10-10 10:38 2 浏览 0 评论

1.简介

自动工作负载信息库 (Automatic Workload Repository)即 AWR 实质上是一个 Oracle 的内置工具。采集与性能相关的统计数据,并从这些统计数据中导出性能量度,以跟踪潜在的问题。

AWR 使用几个表来存储采集的统计数据,所有的表都存储在新的名称为 SYSAUX 的特定表空间中的 SYS 模式下,并且以 WRM$_* 和 WRH$_* 的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),后一种类型保存实际采集的统计数据。 H 代表“历史数据 (historical)”而 M 代表“元数据 (metadata)”。在这些表上构建了几种带前缀BA_HIST_ 的视图,这些视图可以用来编写您自己的性能诊断工具。视图的名称直接与表相关;例如,视图 DBA_HIST_SYSMETRIC_SUMMARY 是在 WRH$_SYSMETRIC_SUMMARY 表上构建的。

1.1.STATISTICS_LEVEL

在默认情况下, Oracle 启用数据库统计收集这项功能(即启用 AWR)。是否启用 AWR 由初始化参数 STATISTICS_LEVEL 控制。

STATISTICS_LEVEL 参数有三个值:

如果 STATISTICS_LEVEL 的值为 TYPICAL 或者 ALL,表示启用 AWR。

如果 STATISTICS_LEVEL 的值为 BASIC,表示禁用 AWR。

可以通过 SHOW PARAMETER STATISTICS_LEVEL 查看当前数据库配置

1.2.快照

快照由后台进程 MMON 自动地每小时采集一次。为了节省空间,采集的数据在 8 天后自动清除。快照频率和保留时间都可以由用户修改。

当前数据库的快照的详细信息可以查看表 SYS.WRH$_ACTIVE_SESSION_HISTORY,或者视图DBA_HIST_SNAPSHOT

2.使用方法

2.1.调用

用 sys 用户登录数据库之后调用脚本:

执行该脚本之后,会依次出现下列参数供用户设置

1. report_type : 报告的文件类型为 txt 或者 html

2. num_days: 报告涉及的天数,设置之后会自动显示这几天内的所有 snapshot

3. begin_snap:报告的起始快照

4. end_snap:报告的终了快照

5. report_name:报告的名称,设置该参数是可以加上文件路径,方便查找。例如:‘D:\awr_report.html’

实际操作情况如下:

也可以通过程序包 DBMS_WORKLOAD_REPOSITORY 生成 AWR 的 html 报告

结果如下:

2.2.异常处理

如果在导出 awr 时包以下错误:

ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小

ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSITORY", line 919

ORA-06512: 在 line 1

处理办法:

UPDATE WRH$_SQLTEXT SET SQL_TEXT = SUBSTR(SQL_TEXT, 1, 1000);

COMMIT;

重新执行脚本即可。

3. AWR 操作

当前的 AWR 保存策略存放在视图 DBA_HST_WR_CONTROL 中

通常查询结果如下:

1. SNAP_INTERVAL: 表示收集 SNAPSHOT 的频率

2. RETENTION: 记录 SNAPSHOT 保存的时间

以上结果表示,每小时产生一个 SNAPSHOT,保留 8 天。

3.1.配置调整

对 AWR 的配置通过 DBMS_WORKLOAD_REPOSITORY 包实现

修改收集快照的时间间隔和保留天数

将收集间隔时间改为 30 分钟一次。并且保留 5 天时间(单位都是分钟):

关闭 AWR

把 interval 设为 0 则关闭自动捕捉快照 :

创建快照:

删除指定范围内的快照:

创建 baseline,保存这些数据用于将来分析和比较:

删除 baseline:

3.2.数据导出

通过程序包 DBMS_SWRF_INTERNAL 实现对 AWR 的导入导出

可以在对应的 MPDIR 中找到对应的 dmp 文件,以及导出的日志文件

也可以通过脚本实现 AWR 数据的导出

执行该脚本之后,会依次出现下列参数供用户设置

1. dbid: 数据库的 DBID

2. num_days:涉及的天数

3. begin_snap:起始快照

4. end_snap:终了快照

5. directory_name:保存 dmp 文件的 directory 名称

6. file_name:新生成的 dmp 文件名

实际操作情况如下:

3.3.数据导入

用程序包 DBMS_SWRF_INTERNAL 导入 AWR 数据的过程分为两个步骤, 首先使用

AWR_LOAD 方法把数据导入到一个临时的 schema 中( 本例是 AWR_TEMP,该用户必须实际

存在),然后使用 MOVE_TO_AWR 方法把数据导入到 sys 中。

迁移 AWR 数据到临时数据库:

把 AWR 数据转移到 SYS 模式中:

也可以通过脚本实现 AWR 数据的导入

执行该脚本之后,会依次出现下列参数供用户设置

1. directory_name: 保存 dmp 文件的 directory 名称

2. file_name: 新生成的 dmp 文件名

3. schema_name: 导入 awr 时用到的临时 schema,该 schema 会在导入完成后背自动删

除,建议使用 oracle 提供的默认用户 awr_stage,这样 oracle 会创建该用户并在导入完

成后删除。

4. default_tablespace:临时 schema 使用的表空间,可以使用默认值

5. temporary_tablespace:临时 schema 使用的临时表空间,可以使用默认值

实际操作情况如下:

3.4.删除报告

可以将从其他服务器上导入的 AWR 报告删除,但是不能删除本地数据库的 AWR。

如下图当前数据库的 dbid 为 1341466941,导入了 1308840241 的 AWR 报告,可以通过UNREGISTER_DATABASE方法删除 1308840241的 AWR报告,但是无法删除 1341466941的 AWR报告。

查询当前数据库上所有的 DBID 可通过视图 DBA_HIST_DATABASE_INSTANCE

4.报告分析

3.1 SQL ordered by Elapsed Time

记录了执行总和时间的 TOP SQL(请注意是监控范围内该 SQL 的执行时间总和,而不是单次

SQL 执行时间 Elapsed Time = CPU Time + Wait Time)。

1. Elapsed Time(S): SQL 语句执行用总时长,此排序就是按照这个字段进行的。注意该时

间不是单个 SQL 跑的时间,而是监控范围内 SQL 执行次数的总和时间。单位时间为

秒。 Elapsed Time = CPU Time + Wait Time

2. CPU Time(s): 为 SQL语句执行时 CPU占用时间总时长,此时间会小于等于 Elapsed Time

时间。单位时间为秒。

3. Executions: SQL 语句在监控范围内的执行次数总计。

4. Elap per Exec(s): 执行一次 SQL 的平均时间。单位时间为秒。

5. % Total DB Time: 为 SQL 的 Elapsed Time 时间占数据库总时间的百分比。

6. SQL ID: SQL 语句的 ID 编号,点击之后就能导航到下边的 SQL 详细列表中,点击 IE 的

返回可以回到当前 SQL ID 的地方。

7. SQL Module: 显示该 SQL 是用什么方式连接到数据库执行的,如果是用 SQL*Plus 或者

PL/SQL 链接上来的那基本上都是有人在调试程序。一般用前台应用链接过来执行的

sql 该位置为空。

8. SQL Text: 简单的 sql 提示,详细的需要点击 SQL ID。

3.2 SQL ordered by CPU Time:

记录了执行占 CPU时间总和时间最长的 TOP SQL(请注意是监控范围内该 SQL的执行占 CPU

时间总和,而不是单次 SQL 执行时间)。

3.3 SQL ordered by Gets:

记录了执行占总 buffer gets(逻辑 IO)的 TOP SQL(请注意是监控范围内该 SQL 的执行占 Gets

总和,而不是单次 SQL 执行所占的 Gets)。

3.4 SQL ordered by Reads:

记录了执行占总磁盘物理读(物理 IO)的 TOP SQL(请注意是监控范围内该 SQL 的执行占磁盘

物理读总和,而不是单次 SQL 执行所占的磁盘物理读)。

3.5 SQL ordered by Executions:

记录了按照 SQL 的执行次数排序的 TOP SQL。该排序可以看出监控范围内的 SQL 执行次数。

3.6 SQL ordered by Parse Calls:

记录了 SQL 的软解析次数的 TOP SQL。说到软解析(soft prase)和硬解析(hard prase)

3.7 SQL ordered by Sharable Memory:

记录了 SQL 占用 library cache 的大小的 TOP SQL。 Sharable Mem (b):占用 library cache 的

大小,单位是 byte。

3.8 SQL ordered by Version Count:

记录了 SQL 的打开子游标的 TOP SQL。

3.9 SQL ordered by Cluster Wait Time:

记录了集群的等待时间的 TOP SQL

(Zyx)

相关推荐

Linux基础知识之修改root用户密码

现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...

Linux如何修改远程访问端口

对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...

如何批量更改文件的权限

如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...

CentOS「linux」学习笔记10:修改文件和目录权限

?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...

Linux下更改串口的权限

问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...

Linux chown命令:修改文件和目录的所有者和所属组

chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...

chmod修改文件夹及子目录权限的方法

chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...

Android 修改隐藏设置项权限

在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...

完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!

最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...

linux改变安全性设置-改变所属关系

CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...

Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod

#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...

linux更改用户权限为root权限方法大全

背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...

怎么用ip命令在linux中添加路由表项?

在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...

Linux配置网络

1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...

Linux系列---网络配置文件

1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...

取消回复欢迎 发表评论: