AWR(一)-基本配置
ORACLE从10g开始,推出AWR(Automatic Workload Repository)工具,使我们可以更方便更直观的分析数据库的性能和状态。AWR有关的表默认都存放在SYSAUX表空间中,维护AWR的是MMON进程。
AWR底层组建有2个部分,内存统计收集组件和AWR快照组件。
1. 数据库使用内存统计收集组件收集统计信息,出于性能这些信息保存在内存当中,然后由MMON进程将内存里的统计信息定期写到磁盘中。
2. AWR快照组件负责通过内存统计收集组件收集到的统计信息定期生成快照。
ADDM(ORACLE自我诊断程序Automatic Database Diagnostic Monitor)发现系统当中的瓶颈,并自动优化,将最终的结果也保留在AWR当中,ADDM自动在每次AWR执行完之后执行,自动比较最后两次的快照,发现问题后自我调整。
下面介绍下AWR的基本配置,可以通过以下SQL查看AWR的保存和采集策略。
SQL> select * from v$version; BANNER ---------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production PL/SQL Release 11.2.0.1.0 - Production CORE 11.2.0.1.0 Production TNS for 32-bit Windows: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> select * from dba_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------------ -------------------- ---------- 1520519778 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT
AWR默认每小时采集一次信息,也就是一个小时产生一个快照,10g版本默认保留策略是7天,11g改为默认保存8天。
可以通过dbms_workload_repository包对AWR进行配置,也可以通过OEM来配置AWR。例如利用dbms_workload_repository包将AWR自动收集信息的时间间隔改为30分钟,保留策略改为30天。
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30,retention=>30*24*60); PL/SQL 过程已成功完成。 SQL> select * from dba_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------------ -------------------- ---------- 1520519778 +00000 00:30:00.0 +00030 00:00:00.0 DEFAULT
如果在数据库非常繁忙的情况下,希望关闭AWR节省资源,只需要将interval设置为0即可。
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>0); PL/SQL 过程已成功完成。 SQL> select * from dba_hist_wr_control; DBID SNAP_INTERVAL RETENTION TOPNSQL ---------- ------------------------------ -------------------- ---------- 1520519778 +40150 00:00:00.0 +00030 00:00:00.0 DEFAULT
如果需要手动抓取快照,收集更精确的信息,只需要执行以下命令。
SQL> exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT (); PL/SQL 过程已成功完成。
可以通过wrh$_active_session_history视图查看快照信息。
SQL> select snap_id,sample_time from wrh$_active_session_history where dbid=1520519778 order by 2; SNAP_ID SAMPLE_TIME ---------- ------------------------------ 570 30-11月-11 03.59.33.260 下午 570 30-11月-11 04.22.53.432 下午 570 30-11月-11 04.24.53.486 下午 570 30-11月-11 04.43.03.632 下午 570 30-11月-11 04.48.03.753 下午 570 30-11月-11 04.48.33.755 下午 571 30-11月-11 05.15.24.045 下午
如果之前快照保留策略设置的太大,而不想保存那么多,就需要对过早的快照进行清理。
SQL> exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id =>400,high_snap_id => 570,dbid => 1520519778); PL/SQL 过程已成功完成。
查看快照是否被删除。
SQL> select snap_id,sample_time from wrh$_active_session_history where dbid=1520519778 order by 2; SNAP_ID SAMPLE_TIME ---------- ------------------------------ 571 30-11月-11 05.15.24.045 下午
如果想要将某段时间的AWR信息保存下来,即使超过AWR的保留期限也不删除,就需要使用基线(baseline)了,ORACLE并没有提供比较2个baseline的过程,创建基线(baseline)只是记录了baseline所指定的快照ID,当维护awr的mmon进程在清除过期的快照时,在baseline中的快照则不会被删除。可以通过以下命令创建基线(baseline)。
SQL> exec dbms_workload_repository.create_baseline (571,572,'dbdream'); PL/SQL 过程已成功完成。
上面的命令以SNAP_ID为571和572的两个快照创建名字为dbdream的基线,可以通过以下SQL查看基线(baseline)信息。
SQL> SELECT BASELINE_NAME,START_SNAP_ID,END_SNAP_ID,START_SNAP_TIME FROM DBA_HIST_BASELINE; BASELINE_NAME START_SNAP_ID END_SNAP_ID START_SNAP_TIME --------------- ------------- ----------- ------------------------------ stt 571 572 30-11月-11 05.40.19.736 下午 dbdream 571 572 30-11月-11 05.40.19.736 下午
删除基线同样也是使用dbms_workload_repository包,好像所有对AWR的配置和管理都可以利用dbms_workload_repository包实现,下面是删除名字为stt的基线。
SQL> exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name =>'stt',cascade=>false); PL/SQL 过程已成功完成。
如果cascade指定的是true,那么和这个基线有关的快照也会被级联删除,cascade指定为false,这些快照不会被删除,验证基线是被删除。
SQL> SELECT BASELINE_NAME,START_SNAP_ID,END_SNAP_ID,START_SNAP_TIME FROM DBA_HIST_BASELINE; BASELINE_NAME START_SNAP_ID END_SNAP_ID START_SNAP_TIME --------------- ------------- ----------- ------------------------------ dbdream 571 572 30-11月-11 05.40.19.736 下午
AWR收集快照信息有BASIC、TYPICAL、ALL 3个级别, BASIC关闭统计信息收集,TYPICAL普通收集级别,只收集够日常用的统计信息,ALL是最给力的,凡是ORACLE能收集的所有信息都要收集,所以生成数据量会很大,相对来说,对性能的影响也是最大的,通常TYPICAL就已经够用了。
可以在OEM里查看数据库当前的收集级别,也可以在SQLPLUS里直接查看。
SQL> show parameter statistics_level NAME TYPE VALUE ------------------------------------ ----------- ---------- statistics_level string TYPICAL
statistics_level是动态参数,在数据库里可以直接修改。
SQL> alter system set statistics_level=all; 系统已更改。 SQL> show parameter statistics_level NAME TYPE VALUE ------------------------------------ ----------- --------- statistics_level string ALL
我看测试部的同事是用OEM配置AWR真方便也很直观,EM我几乎没怎么用过,平时对EM的操作也仅仅是把EM装上,启动起来给测试人员使用,借此机会向测试人员学习了下EM的简单使用,通过EM管理AWR的操作流程基本如下。
OEM登录部分略,登录到OEM,选择服务器,会显示出很多功能按钮。
点击自动工作量资料档案库,就进入到AWR管理界面,会显示AWR的当前配置。
以上可以看出快照保留8天,一小时收集一次快照,点击编辑按钮,就可以对AWR进行配置,比如把保留策略改为15天,30分钟收集一次快照。
点击确定后修改即生效。
如果要关闭AWR功能,点击编辑按钮,选择关闭快照收集,确定,即可。
此时快照时间间隔和下次快照捕获时间都显示为未收集,如果想要在打开AWR自动收集信息,点击编辑按钮再配置一次即可。