oracle10gAWR基本管理

 

高峰时段压力=DB Time/Elapsed/CPU

 

 

手动执行

SQL>exec dbms_workload_repository.create_snapshot;

$@?/rdbms/admin/awrrpt.sql      单实例

$@?/rdbms/admin/awrrpti.sql      RAC

 

DBA 可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。

 

一、概述

awr(Automatic Workload Repository)是oracle 10g推出的一个强有力的信息收集工具,它比之前的statspack有显著的改进,收集的信息也更多、更全面,使用方法也更简单。

 

二、安装

awr是默认安装的,装好了10g的数据库就已经可以使用awr了。

 

三、配置

awr默认每个小时收集一次统计信息,并且保留7天的数据。awr配置信息可以从以下视图查询:

SQL> select * from dba_hist_wr_control;

 

DBID SNAP_INTERVAL RETENTION TOPNSQL

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

3939087858 +00000 00:10:00.0 +00002 00:00:00.0 DEFAULT

 

awr与statspack不同,它不是由job来调度的,而是由MMON来定期收集的。

 

SQL> show parameter job

 

NAME TYPE VALUE

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

job_queue_processes integer 10

 

SQL> select count(1) from dba_jobs;

 

COUNT(1)

----------

0

 

我们可以用dbms_workload_repository.modify_snapshot_settings来修改默认配置

SQL> desc dbms_workload_repository.modify_snapshot_settings

Parameter Type Mode Default? 

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

RETENTION NUMBER IN Y --设定awr信息保留多长时间,单位是分钟,默认是60分钟

INTERVAL NUMBER IN Y --设定收集时间间隔,单位是分钟,默认是1周

TOPNSQL NUMBER IN Y --设定取多少条耗费资源的sql

DBID NUMBER IN Y 

 

如把awr设置为10分钟收集一次、每次收集50条耗费资源的sql,并保留2天的收集数据,可以用如下方式修改

SQL> exec dbms_workload_repository.modify_snapshot_settings(2*24*60,10,50);

 

PL/SQL procedure successfully completed

 

可以看出配置已经改变

SQL> select * from dba_hist_wr_control;

 

DBID SNAP_INTERVAL RETENTION TOPNSQL

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

3939087858 +00000 00:10:00.0 +00002 00:00:00.0 50

 

 

四、生成报表

1、调用脚本

和statspack一样,awr也提供一个脚本来生成报表。报表的形式有两种:text和html。强烈建议生成html格式的报表,可读性非常强。

脚本位置和名称:$ORACLE_HOME/rdbms/admin/awrrpt.sql

用脚本生成awr报表的过程与生成statspack报表非常类似,你需要以sys用户执行这个脚本,执行过程需要输入报表类型、天数(用来决定显示那几天内的snapshot)、begin_snap、end_snap、以及报表名称等5个参数。

如果不不想手工输入参数,你可以修改$ORACLE_HOME/rdbms/admin/awrrpti.sql文件,把需要到的5个变量设置好,在执行过程就不用输入了。

修改awrrpti这个脚本可以让你自动生成报表。

 

2、直接用函数

oracle提供2个函数来生成对应的报表:

DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT :生成text报表

DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_HTML :生成html报表

 

比如:

--获得普通文本格式的awr报告输出

 

SQL> SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_text (262089084, 1, 2529, 2696, 0));

 SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_text (4076803828, 1, 1091, 1258, 0));

然后把输出内容拷贝到某个文件,并命名为xxx.txt即可。

 

--获得超文本格式的awr报告输出                                                  

SQL> SELECT output FROM table (DBMS_WORKLOAD_REPOSITORY.awr_report_html (262089084, 1, 2529, 2696, 0));

然后把输出内容拷贝到某个文件,并命名为xxx.html即可。

 

desc  DBMS_WORKLOAD_REPOSITORY

FUNCTION AWR_REPORT_HTML RETURNS AWRRPT_HTML_TYPE_TABLE
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 L_DBID                        NUMBER                  IN
 L_INST_NUM             NUMBER                  IN
 L_BID                          NUMBER                  IN
 L_EID                          NUMBER                  IN
 L_OPTIONS               NUMBER                  IN     DEFAULT

 

其实$ORACLE_HOME/rdbms/admin/awrrpt.sql就是通过调用以上两个函数来生成报表的。

 

 

--先获得7天内dbid,实例号,开始快照id,结束快照id

 

 SELECT dbid, instance_number,

 MIN (snap_id) begin_snap_id,

 MAX (snap_id) end_snap_id

 FROM  dba_hist_snapshot

 WHERE end_interval_time >= SYSDATE - 7

 GROUP BY  dbid, instance_number;

 

DBID INSTANCE_NUMBER BEGIN_SNAP_ID END_SNAP_ID

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

262089084               1          2529        2696

 

-- Author       : DR Timothy S Hall
-- Description  : Generates AWR reports for all snapsots between the specified start and end point.
-- Requirements : Access to the v$ views, UTL_FILE and DBMS_WORKLOAD_REPOSITORY packages.
-- Call Syntax  : Create the directory with the appropriate path.
--                Adjust the start and end snapshots as required.
--                @generate_multiple_awr_reports.sql
-- Last Modified: 02/08/2007
-- -----------------------------------------------------------------------------------
CREATE OR REPLACE DIRECTORY awr_reports_dir AS '/tmp/';

DECLARE
 
-- Adjust before use.
  l_snap_start       NUMBER := 1;
  l_snap_end         NUMBER := 10;
 
l_dir              VARCHAR2(50) := 'AWR_REPORTS_DIR';
 
  l_last_snap        NUMBER := NULL;
  l_dbid             v$database.dbid%TYPE;
  l_instance_number  v$instance.instance_number%TYPE;
  l_file             UTL_FILE.file_type;
  l_file_name        VARCHAR(50);

BEGIN
 
SELECT dbid
  INTO   l_dbid
  FROM   v$database;

SELECT instance_number
 
INTO   l_instance_number
  FROM   v$instance;
   
  FOR cur_snap IN (SELECT snap_id
                   FROM   dba_hist_snapshot
                   WHERE  instance_number = l_instance_number
                   AND    snap_id BETWEEN l_snap_start AND l_snap_end
                   ORDER BY snap_id)
  LOOP
    IF l_last_snap IS NOT NULL THEN
      l_file := UTL_FILE.fopen(l_dir, 'awr_' || l_last_snap || '_' || cur_snap.snap_id || '.htm', 'w', 32767);
     
      FOR cur_rep IN (SELECT output
                      FROM   TABLE(DBMS_WORKLOAD_REPOSITORY.awr_report_html(l_dbid, l_instance_number, l_last_snap, cur_snap.snap_id)))
      LOOP
        UTL_FILE.put_line(l_file, cur_rep.output);
      END LOOP;
      UTL_FILE.fclose(l_file);
    END IF;
    l_last_snap := cur_snap.snap_id;
  END LOOP;
 
EXCEPTION
  WHEN OTHERS THEN
    IF UTL_FILE.is_open(l_file) THEN
      UTL_FILE.fclose(l_file);
    END IF;
    RAISE;
END;
/

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值