Oracle性能调优(AWR)
一、AWR报告
AWR 是通过对比两次快照(snapshot)收集到的统计信息,来生成报表数据,生成的报表包括多个部分,这点与Statspack生成的报告非常类似。不过AWR在生成报告时,可以选择生成TXT或HTML两种格式的报告,相对来说,HTML更利于阅读,而TXT的适用性更广(即使在不能使用浏览器的机器上也能看)。
操作过Statspack的朋友都还记的,生成报告使用$ORACLE_HOME/rdbms/admin/spreport.sql脚本,到了AWR这片,操作步骤基本上相同,不过生成报告的脚本多了很多选择,包括:
- awrrpt.sql :生成指定快照区间的统计报表; ----产生整个数据库的AWR报告
- awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表; -----产生某个实例的AWR报告
- awrsqlrpt.sql :生成指定快照区间,指定SQL语句(实际指定的是该语句的SQLID)的统计报表; --产生某条SQL语句的AWR报告,运行脚本awrsqrpt.sql
- awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定SQL语句的统计报表;
- awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;
- awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计对比报表;
那么如何产生AWR报告呢?
1、启用AWR
在默认情况下,Oracle启用数据库统计收集这项功能(即启用AWR)。是否启用AWR由初始化参数STATISTICS_LEVEL控制。通过SHOW PARAMETER命令
可以显示STATISTICS_LEVEL的当前值:
SQL> SHOW PARAMETER STATISTICS_LEVEL
SQL语句的执行结果是:
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL
如果STATISTICS_LEVEL的值为TYPICAL或者 ALL,表示启用AWR;如果STATISTICS_LEVEL的值为BASIC,表示禁用AWR.
AWR的行为受到参数STATISTICS_LEVEL的影响。这个参数有三个值:
*BASIC:awr统计的计算和衍生值关闭.只收集少量的数据库统计信息.
*TYPICAL:默认值.只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为.
*ALL : 所有可能的统计都被捕捉. 并且有操作系统的一些信息.这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用.
2、运行脚本awrrpt.sql
SQL> @/oracle/product/10.2.0/db_1/rdbms/admin/awrrpt.sql
3、选择报告的类型
输入 report_type 的值: html
4、列出最近两天产生的快照(主要是获得快照ID)
1. 输入 num_days 的值: 2
Snap
Instance DB Name Snap Id Snap Started Level
------------ ------------ --------- ------------------ -----
telemt TELEMT 4123 06 Mar 2011 00:00 1
4124 06 Mar 2011 01:01 1
....
4160 07 Mar 2011 13:00 1
4161 07 Mar 2011 14:00 1
指定起始快照的ID和结束快照的ID。
1. Specify the Begin and End Snapshot Ids
2. ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
3. 输入 begin_snap 的值:
4. Begin Snapshot Id specified: 4123
5.
6. 输入 end_snap 的值:
7. End Snapshot Id specified: 4161
本例中起始快照的ID是4123,结束快照的ID是4161。
指定报告的名字。
输入 report_name 的值: myreport.html
二、AWR报告日常分析
(1) SQL ordered by Elapsed Time
记录了执行总和时间的TOP SQL(请注意是监控范围内该SQL的执行时间总和,而不是单次SQL执行时间 Elapsed Time = CPU Time + Wait Time)。
Elapsed Time(S): SQL语句执行用总时长,此排序就是按照这个字段进行的。注意该时间不是单个SQL跑的时间,而是监控范围内SQL执行次数的总和时间。单位时间为秒。Elapsed Time = CPU Time + Wait Time
CPU Time(s): 为SQL语句执行时CPU占用时间总时长,此时间会小于等于Elapsed Time时间。单位时间为秒;
Executions: SQL语句在监控范围内的执行次数总计;
Elap per Exec(s): 执行一次SQL的平均时间。单位时间为秒;
% Total DB Time: 为SQL的Elapsed Time时间占数据库总时间的百分比。
SQL ID: SQL语句的ID编号,点击之后就能导航到下边的SQL详细列表中,点击IE的返回可以回到当前SQL ID的地方。
SQL Module: 显示该SQL是用什么方式连接到数据库执行的,如果是用SQL*Plus或者PL/SQL链接上来的那基本上都是有人在调试程序。一般用前台应用链接过来执行的sql该位置为空。
SQL Text: 简单的sql提示,详细的需要点击SQL ID。
(2) SQL ordered by CPU Time
记录了执行占CPU时间总和时间最长的TOP SQL(请注意是监控范围内该SQL的执行占CPU时间总和,而不是单次SQL执行时间)。
(3) SQL ordered by Gets
记录了执行占总buffer gets(逻辑IO)的TOP SQL(请注意是监控范围内该SQL的执行占Gets总和,而不是单次SQL执行所占的Gets)。
(4) SQL ordered by Reads
记录了执行占总磁盘物理读(物理IO)的TOP SQL(请注意是监控范围内该SQL的执行占磁盘物理读总和,而不是单次SQL执行所占的磁盘物理读)。
(5) SQL ordered by Executions
记录了按照SQL的执行次数排序的TOP SQL。该排序可以看出监控范围内的SQL执行次数。
(6) SQL ordered by Parse Calls
记录了SQL的软解析次数的TOP SQL。说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。
(7) SQL ordered by Sharable Memory
记录了SQL占用library cache的大小的TOP SQL。Sharable Mem (b):占用library cache的大小,单位是byte。
(8) SQL ordered by Version Count
记录了SQL的打开子游标的TOP SQL。
(9) SQL ordered by Cluster Wait Time
记录了集群的等待时间的TOP SQL
三、快照(SNAPSHOT)
每隔一小时,内存监控进程(MMON)自动地采集一次统计信息,并把这些信息存放到负载库中,一次采样就是一个快照。为了节省空间,采集的数据在7天后自动清除。快照的频率和保留时间可以由用户修改。
--查看快照的频率和保留时间(默认为每1小时采样一次,采样信息保留时间为7天)
select * from dba_hist_wr_control;
select DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION from wrm$_wr_control;
--修改 快照的频率和保留时间(单位用分钟)
exec dbms_workload_repository.modify_snapshot_settings(interval=>60, retention=>7*24*60);
用户也可以使用下面的命令手工采样(手工生成快照):
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
手工删除指定范围的快照
begin
dbms_workload_repository.drop_snapshot_range(low_snap_id => 3965, high_snap_id => 3966, dbid => 3437504306);
end;
--查看有多少个快照
select count(1) from wrh$_active_session_history;
select count(1) from dba_hist_active_sess_history;
通过查询视图DBA_HIST_SNAPSHOT,可以知道系统中产生了哪些快照。
select * from DBA_HIST_SNAPSHOT;
四、采样数据存放位置
这些采样数据都存储在SYSAUX表空间中,并且以WRM$_* 和 WRH$_*的格式命名。前一种类型存储元数据信息(如检查的数据库和采集的快照),
后一种类型保存实际采集的统计数据.
select table_name from dba_tables where table_name like 'WRM$%';
TABLE_NAME
-----------------------
WRM$_WR_CONTROL
WRM$_SNAP_ERROR
WRM$_SNAPSHOT
WRM$_DATABASE_INSTANCE
WRM$_BASELINE
当SYSAUX表空间满后,AWR将自动覆盖掉旧的信息,并在警告日志中记录一条相关信息:
ORA-1688: unable to extend table SYS.WRH$_ACTIVE_SESSION_HISTORY partition WRH$_ACTIVE_3533490838_1522 by 128 in tablespace SYSAUX
select table_name from dba_tables where table_name like 'WRH$%';
五、设置基线
创建基线
基线(baseline)是一种机制,这样你可以在重要时间的快照信息集做标记。一个基线定义在一对快照之间,快照通过他们的快照序列号识别.每个
基线有且只有一对快照。一次典型的性能调整实践从采集量度的基准线集合、作出改动、然后采集另一个基准线集合开始。可以比较这两个集合来检查
所作的改动的效果。在 AWR 中,对现有的已采集的快照可以执行相同类型的比较。
假定一个名称为 apply_interest 上午 2:00 到 4:00 之间运行,对应快照 ID 4150 到 4151。我们可以为这些快照定义一个名称为 apply_interest_1 的基准线:
SQL> exec dbms_workload_repository.create_baseline(4150, 4151, 'apply_interest_1');
这一操作将快照从 4150 到 4151 编号,作为上面指定的基准线的一部分。查看现有的基准线:
SQL> select *from dba_hist_baseline;
DBID BASELINE_ID BASELINE_NAME START_SNAP_ID START_SNAP_TIME END_SNAP_ID END_SNAP_TIME
---------- ----------- -------------------- ------------- -------------------------------- ----------- -------------------------------
3437504306 1 apply_interest_1 4150 07-3月 -11 03.00.47.627 上午 4151 07-3月 -11 04.00.12.567 上午
SQL> select *from wrm$_baseline;
DBID BASELINE_ID BASELINE_NAME START_SNAP_ID END_SNAP_ID
---------- ----------- ------------------------------ ------------- -----------
3437504306 1 apply_interest_1 4150 4151
在一些调整步骤之后,我们可以创建另一个基准线 — 假设名称为 apply_interest_2(下午2点到4点),然后只为那些与这两条基准线相关的快照比较量度。
SQL> exec dbms_workload_repository.create_baseline(4162, 4163, 'apply_interest_2');
像这样把快照分隔在仅仅几个集合中有助于研究调整对于性能量度的影响。
删除基线
分析之后使用 drop_baseline() 来删除基准线;快照将保留(也可级联删除)。此外,当清除例程开始删除旧的快照时,与基准线相关的快照不会被清除,从而允许进行进一步的分析。
如果要删除一个基准线:
SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'apply_interest_1', cascade=>false);
SQL> select *from wrh$_active_session_history where snap_id in (4150,4151);
SNAP_ID DBID INSTANCE_NUMBER SAMPLE_ID SAMPLE_TIME SESSION_ID ...
4150 3437504306 1 14900840 07-3月 -11 02.55.02.038 上午 162 ...
4150 3437504306 1 14900200 07-3月 -11 02.44.21.942 上午 165 ...
....
4151 3437504306 1 14901980 07-3月 -11 03.14.02.213 上午 165 ...
4151 3437504306 1 14901790 07-3月 -11 03.10.52.183 上午 165 ...
4151 3437504306 1 14901490 07-3月 -11 03.05.52.138 上午 167 ...
--级联删除(基线与快照一块删)
SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'apply_interest_2', cascade=>true);
SQL> select *from wrh$_active_session_history where snap_id in (4162,4163);
未选定行
Oracle性能调优(AWR)的更多相关文章
- [转]oracle性能调优之--Oracle 10g AWR 配置
一.ASH和AWR的故事 1.1 关于ASH 我们都知道,用户在ORACLE数据库中执行操作时,必然要创建相应的连接和会话,其中,所有当前的会话信息都保存在动态性能视图V$SESSION中,通过该视图 ...
- Oracle性能调优之物化视图用法简介
目录 一.物化视图简介 二.实践:创建物化视图 一.物化视图简介 物化视图分类 物化视图分类,物化视图语法和as后面的sql分为: (1) 基于主键的物化视图(主键物化视图) (2)基于Rowid的物 ...
- Oracle性能调优之虚拟索引用法简介
本博客记录一下Oracle虚拟索引的用法,虚拟索引是定义在数据字典中的伪索引,可以说是伪列,没有修改的索引字段的.虚拟索引的目的模拟索引,不会增加存储空间的使用,有了虚拟索引,开发者使用执行计划的时候 ...
- Oracle 性能调优之:使用 V$SQL_PLAN 视图查询内存中的执行计划
V$SQL_PLAN视图提供了一种方法,可用于检查仍位于库高速缓存的游标的执行计划.此视图中的信息与 PLAN_TABLE 视图中的信息非常类似.但是,EXPLAIN PLAN 显示的是执行相应语句时 ...
- Oracle 性能调优 SQL_TRACE
思维导图 Oracle优化10-SQL_TRACE解读 Oracle优化11-10046事件 概述 当我们想了解一条SQL或者是PL/SQL包的运行情况时,特别是当他们的性能非常差时,比如有的时候看起 ...
- Oracle 性能调优 10053事件
思维导图 10053事件概述 我们在查看一条SQL语句的执行计划时,只看到了CBO最终告诉我们的执行计划结果,但是我们并不知道CBO为何要这样做. 特别是当执行计划明显失真时,我们特别想搞清楚为什么C ...
- Oracle 性能调优案例(代码级别)
业务案例一: 业务:千万记录表中查询出50条符合条件的记录. 现象:oracle部署时跨机器,业务取得数据耗时10ms.造成业务性能不达标. 为了突出主题,对于异常分支,均已省略. 对于通常写法, o ...
- Oracle 性能调优
在 oracle 中效率排行, 表连接>exist>not exist>in>no in 并且使用in 查询 会有查询条件数量不能超过1000 的限制: 简单提高效率可以使用 ...
- Oracle性能调优
这部分目前主要是从网上搜集来的,后续要在实践中慢慢体会. v$sqltext: 存储的是被分割的sql v$sqlarea: 存储的是完整的sql和一些统计信息,比如累计的执行次数.逻辑读.物理读等( ...
随机推荐
- 设计模式_Observer_观察者模式
形象例子: 想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦.观察者 ...
- bzoj 3198 [Sdoi2013]spring(容斥原理+Hash)
Description Input Output Sample Input 3 3 1 2 3 4 5 6 1 2 3 0 0 0 0 0 0 4 5 6 Sample Output 2 HINT [ ...
- Max Sub-matrix
Max Sub-matrix 教练找的题目,目前样列过了 题意:找子矩阵的最大周长 思路:先离散每列,再枚举列(n*n),在当前枚举的两列之间求每行的和(n*n*n),但是开两个数组,一个包含两列上的 ...
- 【HBase学习】Apache HBase项目简介
原创声明:转载请注明作者和原始链接 http://www.cnblogs.com/zhangningbo/p/4068957.html 英文原版:http://hbase.apache.o ...
- Spark环境的搭建与运行
Spark本地安装与配置 下载spark后解压,并cd到解压目录下 运行实例程序测试是否一切正常 ./bin/run-example org.apache.spark.examples.SparkPi ...
- Codeforces Round #225 (Div. 2)
比赛时候只做出AB,E题一眼看过去似乎线段树能搞,但是写完过不了样例,才发现看错题了,然后比赛就没啥时间了~~整体状况还是很糟糕,A,B题实在出得太慢,然后持续到现在还没出过C题...不能更弱%> ...
- Android实例-解决虚拟键盘遮挡问题(XE8+小米2)
结果: 1.可以自动向上移动,来防遮挡,但同时发现个问题,如果是按硬件返回没有问题,要是点输入法(QQ.百度输入法)上的隐藏就不行了. 2.点击Edit2后出现输入法,点输入法上的隐藏后, 再点Edi ...
- [iOS基础控件 - 4.1] APP列表
需求 1.以N宫格的形式展示应用信息 2.APP信息包括图标.名字.下载按钮 3.使用尽可能少的代码,从plist读取app信息,计算每个app图标的位置尺寸信息 A.思路 1.UI布局:N宫 ...
- 转载c#泛型 类型参数的约束(c#编程指南)
在定义泛型类时,可以对客户端代码能够在实例化类时用于类型参数的类型种类施加限制.如果客户端代码尝试使用某个约束所不允许的类型来实例化类,则会产生编译时错误.这些限制称为约束.约束是使用 where 上 ...
- AVR ATMEGA8 串口USART
avr串口配置很简单,配置就几个寄存器就可以进收发: 但有几点要搞明白的是: 1.串口一但被配置成功IO功能自动被占用,这点与LPC或STM8/32不同(需要寄存配置): 2.没有专门的串口开起或闭关 ...