zoukankan      html  css  js  c++  java
  • ORACLE数据库AWR工具学习

      AWR(Automatic Workload Repository)即工作负载信息库,主要用于收集数据库运行状态的资料库,通过AWR报告可以分析ORACLE数据库的性能,从而给出优化策略。

      

    图一:此图来自网上  

    1、AWR的由来

      10g之前的oracle:用户的连接将产生会话,当前会话记录保存在v$session中;处于等待状态的会话会被复制一份放在v$session_wait中。当该连接断开后,其原来的连接信息在v$session和v$session_wait中就会被删除;oracle10g及之后保留下了v$session_wait中的这些信息,并多了v$active_session_history(ASH)视图,记录每个活动session在v$session_wait中最近10次的等待事件。   

      ASH的采样数据是保存在内存中。而分配给ASH的内存空间是有限的,当所分配空间占满后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASH信息都会消失。这样,对于长期检测oracle的性能是不可能的。在Oracle10g中,提供了永久保留ASH信息的方法,这就是AWR。    

      由于全部保存ASH中的信息是非常耗费时间和空间的,AWR采用的策略是:每小时对v$active_session_history进行采样一次,并将信息保存到磁盘中,并且保留7天,7天后旧的记录才会被覆盖。这些采样信息被保存在视图wrh$_active_session_history中。而这个采样频率(1小时)和保留时间(7天)是可以根据实际情况进行调整的,这就给DBA们提供了更加有效的系统监测工具。具体如何去修改采样频率和保留时间,下文将进行详细介绍。

    2、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。

    初始化参数statistics_level介绍:  

    AWR的行为受到参数STATISTICS_LEVEL的影响。这个参数有三个值:  

    (1)BASIC:AWR统计的计算和衍生值关闭.只收集少量的数据库统计信息.

    (2)TYPICAL:默认值.只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为.  

    (3)ALL : 所有可能的统计都被捕捉. 并且有操作系统的一些信息.这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用。

      通过以下两种方式来进行对statistics_level参数设置:

      alter system set statistics_level=typical; --修改数据库统计信息级别

      alter session set statistics_level=typical;--修改当前会话

    3、快照(SNAPSHOT)

      快照每隔一小时,内存监控进程(MMON)自动地采集一次统计信息,并把这些信息存放到负载库中,一次采样就是一个快照。为了节省空间,采集的数据在7天后自动清除。快照的频率和保留时间可以由用户修改。  

    --查看快照的频率和保留时间   

    SQL> SELECT * FROM dba_hist_wr_control;      

    DBID SNAP_INTERVAL                           RETENTION                               TOPNSQL

    ---------- --------------------------------------- --------------------------------------- ----------

    1339601269 +00000 01:00:00.0                       +00007 00:00:00.0                       DEFAULT   

    SELECT dbid, snap_interval, snapint_num, retention FROM wrm$_wr_control;   

    --修改快照的频率和保留时间(单位用分钟)   

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

    备注:

    (1)关于内存监控进程(MMON)说明

    MMON应该是 Memory Monitor的缩写,但是在有的文档中被记录为Manageability Monitor,这应当是10g早期版本中的称呼,只不过后来发生了变更。这个进程的主要作用: The memory monitor (MMON) process was introduced in 10g and is associated with the Automatic Workload Repository new features used for automatic problem detection and self-tuning. MMON writes out the required statistics for AWR on a scheduled basis.

    另一个进程是MMNL,是Memory Monitor Light(MMNL)的缩写,在部分文档中记录为Manageability Monitor Light .这个进程的作用如下: The Memory Monitor Light (MMNL) process is a new process in 10g which works with the Automatic Workload Repository new features (AWR) to write out full statistics buffers to disk as needed.

    (2)ORA-13541错误信息

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

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

    ORA-13541: 系统移动窗口基线大小 (691200) 大于保留时间 (432000)   

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

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

    ORA-06512: 在 line 2

    查看检查当前的移动窗口基线大小  

    SQL> SELECT dbid, baseline_name, baseline_type, moving_window_size from dba_hist_baseline;    

    DBID            BASELINE_NAME                                                    BASELINE_TYPE MOVING_WINDOW_SIZE   

    ---------- ---------------------------------------------------------------- ------------- ------------------   

    1339601269   SYSTEM_MOVING_WINDOW                                   MOVING_WINDOW                  7   

    修改当前的移动窗口基线大小,便可以修改retention大小。

    SQL> exec dbms_workload_repository.modify_baseline_window_size(5);   

    PL/SQL procedure successfully completed

    4、相关AWR视图 

    SQL> 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$_COLORED_SQL   

    WRM$_BASELINE_TEMPLATE   

    WRM$_BASELINE_DETAILS   

    WRM$_BASELINE  

    以上表都存放在sysaux表空间里,另外还有:   

    SELECT * FROM dba_hist_snapshot;   

    SELECT * FROM dba_hist_active_sess_history;   

    SELECT * FROM wrh$_active_session_history;

    5、生产AWR报告 

    Oracle可以产生两种类型的AWR报告:文本格式和HTML 格式。HTML格式的报告界面更加友好。AWR报告用于显示两个快照或者两个时间点之间捕捉到的数据。AWR报告其实就是一张数据库健康体检表,它显示了数据库健康的各项指标。有针对整个数据库的AWR报告,有针对某个实例的AWR报告(在集群环境),有针对单条SQL语句的AWR报告。通过运行Oracle自带的SQL脚本产生。

    --产生整个数据库的AWR报告,运行脚本awrrpt.sql。

    @$ORACLE_HOME/rdbms/admin/awrrpt.sql

    --产生某个实例的AWR报告,运行脚本awrrpti.sql。

    @$ORACLE_HOME/rdbms/admin/awrrpti.sql

    --产生某条SQL语句的AWR报告,运行脚本awrsqrpt.sql。

    @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql --注:

    $ORACLE_HOME代表Oracle的主目录。

    附注:产生整个数据库的AWR报告。

    Oracle的主目录是D:appproduct11.1.0db_1RDBMSADMIN 运行脚本awrrpt.sql。

    SQL> @D:appproduct11.1.0db_1 dbmsadminawrrpti.sql Specify the Report Type ~~~~~~~~~~~~~~~~~~~~~~~ Would you like an HTML report, or a plain text report? Enter 'html' for an HTML report, or 'text' for plain text Defaults to 'html' 输入 report_type 的值:  html

    Type Specified:  html

    Instances in this Workload Repository schema

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~   

    DB Id     Inst Num DB Name      Instance     Host

    ------------ -------- ------------ ------------ ------------

    * 1339601269        1 ORCL         orcl         win7-PC

    输入 dbid 的值:  1339601269

    Using 1339601269 for database Id 输入 inst_num 的值:  1

    Using 1 for instance number

    Specify the number of days of snapshots to choose from ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Entering the number of days (n) will result in the most recent (n) days of snapshots being listed.  Pressing <return> without specifying a number lists all completed snapshots.

    输入 num_days 的值:  4

    Listing the last 4 days of Completed Snapshots                                                        

    Snap Instance DB Name  Snap Id  Snap Started      Level

    ------------ ------------ --------- ------------------ -----

    orcl         ORCL      83   03 8月  2013 11:21     1                                                              84   03 8月  2013 12:00     1                                                              85   03 8月  2013 13:00     1                                                              86   03 8月  2013 16:29     1                                                              87   03 8月  2013 17:00     1                                                              88   03 8月  2013 21:44     1                                                              89   03 8月  2013 23:00     1                                                              90   04 8月  2013 09:11     1                                                              91   04 8月  2013 10:00     1                                                              92   04 8月  2013 11:00     1

    Specify the Begin and End Snapshot Ids ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    输入 begin_snap 的值:  91 Begin Snapshot Id specified: 91 输入 end_snap 的值:  92 End   Snapshot Id specified: 92

    Specify the Report Name

    ~~~~~~~~~~~~~~~~~~~~~~~

    The default report file name is awrrpt_1_91_92.html.  To use this name, press <return> to continue, otherwise enter an alternative.

    输入 report_name 的值:myawrreport.html

    6、使用shell或者python自动生产AWR报告  

    http://wenku.baidu.com/view/940d262a647d27284b73518f.html[参考]

     ----------the  end --------------

    本文内容非常感谢[蓝紫博主]博客地址:

    http://www.cnblogs.com/lanzi/archive/2011/03/07/1975096.html

    oracle官网参考:

    http://docs.oracle.com/cd/B19306_01/appdev.102/b14258/d_wkrpos.htm#BACEHJJI

  • 相关阅读:
    C++中break语句、continue语句和goto语句区别
    面试题 01.03:URL化(C++)
    面试题 01.02: 判定是否互为字符重排(C++)
    面试题 01.01: 判定字符是否唯一(C++)
    探索one
    面试题32
    面试题32
    面试题32
    面试题33: 二叉搜索树的后序遍历序列(C++)
    用命令行执行php脚本输出乱码
  • 原文地址:https://www.cnblogs.com/oracle-dba/p/3236104.html
Copyright © 2011-2022 走看看