重庆思庄Oracle、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 10335|回复: 15
打印 上一主题 下一主题

Oracle Awr

[复制链接]
跳转到指定楼层
楼主
发表于 2013-12-6 11:57:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

Table of Contents

About Oracle AWR
Oracle AWR Basic Example
Oracle AWR License
Oracle AWR 说明
认识AWR
一.ASH(v$active_session_history)和AWR
二.详细介绍 AWR
   Oracle AWR Views
三.使用AWR
Using Oracle AWR
oracle10g awr取得快照
查看当前的AWR保存策略
调整AWR配置
停止AWR的方法
ORACLE 10g/11g重建AWR

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

16#
 楼主| 发表于 2013-12-6 12:08:05 | 只看该作者

ORACLE 10g/11g重建AWR

ORACLE 10g/11g重建AWR

 

如果在日常工作中遇见了AWR数据量太大,可以通过如下方式做以清除:

SQL> select distinct dbid,db_name,instance_name from wrm$_database_instance;
DBID DB_NAME   INSTANCE_NAME                                           
---------- --------- ----------------                                 
2691876695 MYDB      mydb      
 
-- 运行如下脚本
SQL> @?\rdbms\admin\catnoawr.sql
 
-- 不重启的话,清空共享池
alter system flush shared_pool;
 
-- 运行重建AWR脚本:
SQL> @?\rdbms\admin\catawrtb.sql
 
-- recompile 
SQL> @?\rdbms\admin\utlrp.sql

ORACLE 11g需要需要运行如下脚本:

SQL> @?\rdbms\admin\execsvrm.sql

测试

SQL> exec dbms_workload_repository.create_snapshot;

如果不对存储过程进行重新编译,执行快照过程会提示如下问题:

SQL> exec dbms_workload_repository.create_snapshot;
BEGIN dbms_workload_repository.create_snapshot; END;
 
*
第 1 行出现错误: 
ORA-13516: AWR 操作失败: AWR Schema not initialized
ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSITORY", line 99
ORA-06512: 在 "SYS.DBMS_WORKLOAD_REPOSITORY", line 122
ORA-06512: 在 line 1 
在重新编译了存储过程后,存储过程运行正常
 
隔5分钟后,再次运行:
SQL> exec dbms_workload_repository.create_snapshot;
 
PL/SQL 过程已成功完成。
SQL> @?/rdbms/admin/awrrpt.sql

注意在RAC环境下的话,需要取消集群参数后,待执行完成后再次修改过来:

alter system set cluster_database = false scope = spfile;

当然在重建后我们需要进一步检查下相关对象是否存在异常,对于存在异常的对象需要重新编译:

spool objects.lst                                                                  
set pagesize500                                                                   
set linesize 100                                                                  
 
select substr(comp_name,1,40) comp_name, status, substr(version,1,10) version     
from dba_registry                                                                 
order by comp_name;                                                               
 
select substr(object_name,1,40) object_name,substr(owner,1,15) owner,object_type  
from dba_objects                                                                  
where status='INVALID' order by owner,object_type;                                
 
select owner,object_type,count(*)                                                 
from dba_objects                                                                  
where status='INVALID'                                                            
group by owner,object_type order by owner,object_type ;                           
 
spool off                                                                         
 
alter package <schema name>.<package_name> compile;                               
alter package <schema name>.<package_name> compile body;                          
alter view <schema name>.<view_name> compile;                                     
alter trigger <schema).<trigger_name> compile;
回复 支持 反对

使用道具 举报

15#
 楼主| 发表于 2013-12-6 12:07:28 | 只看该作者

停止AWR的方法

Many Ways to Disable AWR:

Download Meta-Link script dbms_awr.plb, compile this package, then execute the PL/SQL package dbms_awr.disable_awr() [see metalink note 436386.1].
Set your init.ora parameter STATISTICS_LEVEL = BASIC
Execute the Oracle provided PL/SQL package: dbms_workload_repository.modify_snapshot_settings(interval=>0)
Execute the Oracle provided PL/SQL package: dbms_scheduler.disable('GATHER_STATS_JOB')
You can use Toad for #3: Main Menu->Database->Monitor->ADDM/AWR Reports screen, choose the Snapshot Management tab, set the interval to all zeroes, and then press the green checkmark in upper left corner to commit the change.
You can use Toad for #4: Main Menu->Schema Browser, choose the Sched. Job tab and disable the GATHER_STATS_JOB job.
You can use OEM for #4: Main Menu->Workload->Automatic Workload Repository, select the “Edit” button and then select the last radio group item labeled: Turn off Snapshot Collection, finally press OK
You can use OEM for #5: Main Menu->Scheduler->Jobs, select the data grid row for GATHER_STATS_JOB, choose the disable drop-down action, then finally press OK
Create your own database creation scripts (i.e. do not use DBCA) and make sure not to run the CATAWRTB.sql script [Note – Oracle upgrade process may undo this]
Run the CATNOAWR.sql script to drop the AWR Repository tables [Note – Oracle upgrade process may undo this]

回复 支持 反对

使用道具 举报

14#
 楼主| 发表于 2013-12-6 12:07:12 | 只看该作者
以上结果表示,每小时产生一个SNAPSHOT,保留7天

调整AWR配置

AWR配置都是通过dbms_workload_repository包进行配置

1调整AWR产生snapshot的频率和保留策略,如:如将收集间隔时间改为30 分钟一次。并且保留5天时间(注:单位都是为分钟):

exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);

2关闭AWR,把interval设为0则关闭自动捕捉快照

3手工创建一个快照

exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();

4 查看快照

select * from sys.wrh$_active_session_history

5手工删除指定范围的快照

exec WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 22, high_snap_id => 32, dbid => 3310949047);

6创建baseline

exec dbms_workload_repository.create_baseline (56,59,'apply_interest_1')

7删除baseline

exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => ' apply_interest_1', cascade => FALSE);

3.生产AWR报告

$ORACLE_HOME/rdbms/admin/awrrpt.sql

回复 支持 反对

使用道具 举报

13#
 楼主| 发表于 2013-12-6 12:06:45 | 只看该作者

查看当前的AWR保存策略

select * from dba_hist_wr_control;
DBID,SNAP_INTERVAL,RETENTION,TOPNSQL
860524039,+00 01:00:00.000000,+07 00:00:00.000000,DEFAULT
回复 支持 反对

使用道具 举报

12#
 楼主| 发表于 2013-12-6 12:06:32 | 只看该作者

Using Oracle AWR

oracle10g awr取得快照

SQL> SQLPLUS / AS SYSDBA
SQL> exec dbms_workload_repository.create_snapshot
SQL> exec:snap_id:=dbms_workload_repository.create_snapshot
SQL> var snap_id number
SQL> print snap_id
SQL> @?/rdbms/admin/awrrpt.sql
回复 支持 反对

使用道具 举报

11#
 楼主| 发表于 2013-12-6 12:05:44 | 只看该作者
   SNAP_ID       DBID INSTANCE_NUMBER  SAMPLE_ID SAMPLE_TIME
--------
-- ---------- --------------- ---------- -------------------------------
       
97 1160732652               1     238420 06-10月-07 11.50.55.686 上午
       
97 1160732652               1     238230 06-10月-07 11.47.45.687 上午
       
98 1160732652               1     239140 06-10月-07 01.42.00.976 下午
       
98 1160732652               1     239140 06-10月-07 01.42.00.976 下午
       
98 1160732652               1     239140 06-10月-07 01.42.00.976 下午
       
98 1160732652               1     239140 06-10月-07 01.42.00.976 下午
       
98 1160732652               1     239140 06-10月-07 01.42.00.976 下午
       
98 1160732652               1     239130 06-10月-07 01.27.04.161 下午
       
98 1160732652               1     239130 06-10月-07 01.27.04.161 下午
       
98 1160732652               1     239130 06-10月-07 01.27.04.161 下午

已选择
21行。

SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'apply_interest_2', cascade=>true);

PL/SQL 过程已成功完成。

SQL> select *from wrh$_active_session_history where snap_id in (92,93,94);
未选定行

SQL>
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2013-12-6 12:05:24 | 只看该作者

5.删除基线

如果要删除一个基准线:

SQL> exec dbms_workload_repository.drop_baseline(baseline_name=>'apply_interest_1', cascade=>false);
 
PL/SQL 过程已成功完成。
 
SQL> select *from wrh$_active_session_history where snap_id in (95,96,97,98);
 
   SNAP_ID       DBID INSTANCE_NUMBER  SAMPLE_ID SAMPLE_TIME
---------- ---------- --------------- ---------- -------------------------------
        95 1160732652               1     235360 06-10月-07 10.56.29.872 上午
        95 1160732652               1     235230 06-10月-07 10.54.19.857 上午
        95 1160732652               1     233130 06-10月-07 10.19.19.478 上午
        95 1160732652               1     232830 06-10月-07 10.14.18.859 上午
        95 1160732652               1     232250 06-10月-07 10.04.38.481 上午
        97 1160732652               1     238600 06-10月-07 12.33.08.420 下午
        97 1160732652               1     238600 06-10月-07 12.33.08.420 下午
        97 1160732652               1     238600 06-10月-07 12.33.08.420 下午
        97 1160732652               1     238600 06-10月-07 12.33.08.420 下午
        97 1160732652               1     238600 06-10月-07 12.33.08.420 下午
        97 1160732652               1     238600 06-10月-07 12.33.08.420 下午
 
回复 支持 反对

使用道具 举报

9#
 楼主| 发表于 2013-12-6 12:04:56 | 只看该作者

4.设置基线
基线(baseline)是一种机制,这样你可以在重要时间的快照信息集做标记。一个基线定义在一对快照之间,快照通过他们的快照序列号识别.每个基线有且只有一对快照。一次典型的性能调整实践从采集量度的基准线集合、作出改动、然后采集另一个基准线集合开始。可以比较这两个集合来检查所作的改动的效果。在 AWR 中,对现有的已采集的快照可以执行相同类型的比较。
假定一个名称为 apply_interest 的高度资源密集的进程在下午 1:00 到 3:00 之间运行,对应快照 ID 95 到 98。我们可以为这些快照定义一个名称为apply_interest_1 的基准线:

SQL> select *From dba_hist_baseline;
 
未选定行
 
SQL> select * from wrm$_baseline;
 
未选定行
 
SQL> exec dbms_workload_repository.create_baseline(95, 98, 'apply_interest_1');
 
PL/SQL 过程已成功完成。
 
这一操作将快照从 9598 编号,作为上面指定的基准线的一部分。查看现有的基准线:
SQL> select *from dba_hist_baseline;
 
      DBID BASELINE_ID BASELINE_NAME     START_SNAP_ID START_SNAP_TIME               END_SNAP_ID END_SNAP_TIME
---------- ----------- ------------------------- ------------- ------------------------------------- ----------- ------------
1160732652           1 apply_interest_1             95 06-10月-07 11.00.05.375 上午           98 06-10月-07 01.44.58.062 下午
 
SQL> select *from wrm$_baseline;
 
      DBID BASELINE_ID BASELINE_NAME        START_SNAP_ID END_SNAP_ID
---------- ----------- ---------------------------- ------------- -----------
1160732652           1 apply_interest_1                95          98
 
SQL>

在一些调整步骤之后,我们可以创建另一个基准线 — 假设名称为 apply_interest_2,然后只为那些与这两条基准线相关的快照比较量度。
SQL> exec dbms_workload_repository.create_baseline(92, 94, 'apply_interest_2');

PL/SQL 过程已成功完成。
像这样把快照分隔在仅仅几个集合中有助于研究调整对于性能量度的影响。您可以在分析之后使用 drop_baseline() 来删除基准线;快照将保留(也可级联删除)。 此外,当清除例程开始删除旧的快照时,与基准线相关的快照不会被清除,从而允许进行进一步的分析。

 

回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2013-12-6 12:04:30 | 只看该作者

使用AWR

三、使用AWR

AWR由ORACLE自动产生,不过也可以通过DBMS_WORKLOAD_REPOSITORY包来手工创建、删除和修改。可以使用desc命令查看该包中的过程。下面只介绍几个常用的:

1.手工创建一个快照

SQL> select count(*) from wrh$_active_session_history;
  COUNT(*)
----------
     317  

SQL> begin
  2  dbms_workload_repository.create_snapshot();
  3  end;
  4  /

PL/SQL 过程已成功完成。
SQL> select count(*) from wrh$_active_session_history;
  COUNT(*)
----------
       320

2.手工删除指定范围的快照

SQL> select * from wrh$_active_session_history where snap_id = 96;
   SNAP_ID       DBID INSTANCE_NUMBER  SAMPLE_ID SAMPLE_TIME
---------- ---------- --------------- ---------- ----------------------------
        96 1160732652               1     236930 06-10月-07 11.26.04.562 上午
        96 1160732652               1     236930 06-10月-07 11.26.04.562 上午
        96 1160732652               1     236930 06-10月-07 11.26.04.562 上午

SQL> begin
  2  dbms_workload_repository.drop_snapshot_range(low_snap_id => 96, high_snap_id => 96, dbid => 1160732652);
  3  end;
  4  /
PL/SQL 过程已成功完成。
SQL> select * from wrh$_active_session_history where snap_id = 96;
未选定行

3.修改采集时间和统计信息保留时间

PROCEDURE MODIFY_SNAPSHOT_SETTINGS
参数名称                       类型                    输入/输出默认值?
------------------------------ ----------------------- ------ --------
RETENTION                      NUMBER                  IN     DEFAULT
INTERVAL                       NUMBER                  IN     DEFAULT
TOPNSQL                        NUMBER                  IN     DEFAULT
DBID                           NUMBER                  IN     DEFAULT

通过修改retention参数可以修改awr信息的保留期限。默认的是七天,最小的值是一天。如果把retention设置为零,自动清除就关闭了.如果awr发现sysaux空间不够,它通过删除那些最老部分的快照来重新使用这些空间.同时,也会给dba发一条警告,告诉sysaux空间不够了(在alert log中).通过修改interval参数可以修改awr信息的采样频率。最小的值是10分钟,默认的是60分钟.典型的值是10,20,30,60,120等等。把interval设为0则关闭自动捕捉快照.如将收集间隔时间改为30 分钟一次。并且保留5天时间(注:单位都是为分钟):

SQL> select *from dba_hist_wr_control;
      DBID SNAP_INTERVAL      RETENTION          TOPNSQL
---------- ------------------ -------------------------- -----------
1160732652 +00000 01:00:00.0  +00007 00:00:00.0          DEFAULT
 
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
PL/SQL 过程已成功完成。
 
SQL> SELECT *from dba_hist_wr_control;
      DBID SNAP_INTERVAL       RETENTION         TOPNSQL
---------- ------------------- ------------------------- -----------
1160732652 +00000 00:30:00.0   +00005 00:00:00.0         DEFAULT
 
SQL>

 

回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2024-5-7 23:32 , Processed in 0.118469 second(s), 21 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表