AWR 是 Automatic Workload Repository 的简称,中文叫着自动工作量资料档案库。对于 AWR 的管理,主要是针对快照和基线的管理而言。比如设定快照的间隔,删除快照,设定快照的保留时间。那对于基线而言则是基线的创建,删除,自动创建等。本文主要描述这 2 部分的内容。
默认情况下,Oracle 数据库每小时生成一次快照,并在工作负载库中保留 8 天的统计信息。必要时,你可以使用 dbms_workload_repository 程序手动创建,删除或者修改快照等。可以使用 OEM 以及 dbms_workload_repository 包管理快照。
使用以下过程手工创建快照,创建完成后可在数据字典 DBA_HIST_SNAPSHOT 查看所有快照相关信息。
- BEGINDBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
- END;/SELECTsnap_id,
- dbid,
- begin_interval_time,
- end_interval_timeFROMdba_hist_snapshotORDER BYend_interval_timeDESC;SNAP_ID DBID BEGIN_INTERVAL_TIME END_INTERVAL_TIME---------- ---------- ---------------------------- --------------------------164 41924548 14-APR-17 09.38.19.467 AM 14-APR-17 10.51.21.886 AM
- 163 41924548 14-APR-17 09.00.10.470 AM 14-APR-17 09.38.19.467 AM
- 162 41924548 14-APR-17 08.00.07.242 AM 14-APR-17 09.00.10.470 AM
- 161 41924548 14-APR-17 07.00.04.120 AM 14-APR-17 08.00.07.242 AM
以下过程将删除 snap_id 从 162 到 164 的快照。在未指定 41924548 时,使用当前缺省的数据库
- BEGINDBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (low_snap_id =>162,
- high_snap_id =>164, dbid =>41924548);
- END;/
- --查看当前的保留策略,如下,为缺省值,采集间隔为1小时,保留8天
- SQL>select * from dba_hist_wr_control;
- DBID SNAP_INTERVAL RETENTION TOPNSQL
- ---------- -------------------- ------------------ ----------
- 41924548 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT
- --下面将其修改为保留5天,采集间隔为30分钟,topnsql为50条
- BEGIN
- DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS( retention =>10*24*60,
- interval =>30, topnsql =>50, dbid =>41924548);
- END;
- /
- --查看修改后的结果
- SQL>select * from dba_hist_wr_control;
- DBID SNAP_INTERVAL RETENTION TOPNSQL
- ---------- -------------------- ------------------ ----------
- 41924548 +00000 00:30:00.0 +00010 00:00:00.0 50
AWR 基线可以手工创建和删除,也可以自动创建和删除。对于自动创建基线则是首先要创建基线样本才能实现自动创建基线。主要描述如下。
基线的创建依赖于快照,因此在创建之前应该得到所需时间范围的 snap_id,可以通过查询数据字典 DBA_HIST_SNAPSHOT 获得,同时在基线创建完成后可以从数据字典 DBA_HIST_BASELINE 查询基线相关信息。
- BEGIN
- DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id =>160,
- end_snap_id =>161, baseline_name =>'peak_baseline',
- dbid =>41924548, expiration =>10);
- END;
- /
- SQL> SELECT baseline_id,2baseline_name,3baseline_type,4expiration,5creation_time6FROM dba_hist_baseline;
- BASELINE_ID BASELINE_NAME BASELINE_TYPE EXPIRATION CREATION_
- ----------- ----------------------- ------------- ---------- ---------1peak_baselineSTATIC 10 14-APR-17
- 0SYSTEM_MOVING_WINDOW MOVING_WINDOW07-APR-17--基于特定时间创建基线,如下示例
- BEGIN
- DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (
- start_time => TO_DATE ('2017-04-14 6:00:00','yyyy-mm-dd hh24:mi:ss'),
- end_time => TO_DATE ('2017-04-14 8:00:00','yyyy-mm-dd hh24:mi:ss'),
- baseline_name =>'peak_baseline2',
- expiration =>10);
- END;
- /
在上面的示例中,创建了一个范围为 160-161 的,名字为 peak_baseline 的基线,保留时间为 10 天。在超过 10 天后,该基线会被删除,相应的快照也被删除。如果为指定失效期,则该基线以及相应的快照被永久保留。
- BEGINDBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name =>'peak_baseline',cascade=>FALSE, dbid =>41924548);
- END;/
在上面的示例中将删除名为 peak_baseline 的基线,同时指定了 cascade 为 false,也就是说在删除基线的同时,不删除相应的快照。
- BEGINDBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
- old_baseline_name =>'peak_baseline',
- new_baseline_name =>'peak_mondays',
- dbid =>41924548);END;
- /--验证结果SQL>SELECTbaseline_id,2baseline_name,3baseline_type,4expiration,5creation_time6FROM dba_hist_baseline;
- BASELINE_ID BASELINE_NAME BASELINE_TYPE EXPIRATION CREATION_----------- ----------------------- ------------- ---------- ---------
- 1peak_mondays STATIC10 14-APR-17
- 0SYSTEM_MOVING_WINDOW MOVING_WINDOW07-APR-17
在上面的示例中,将基线的名称由 peak_baseline 修改成 peak_mondays。
- --查看缺省的window_size
- SELECTbaseline_name, baseline_type, moving_window_sizeFROMdba_hist_baselineWHEREbaseline_name ='SYSTEM_MOVING_WINDOW';BASELINE_NAME BASELINE_TYPE MOVING_WINDOW_SIZE------------------------ ------------- ------------------SYSTEM_MOVING_WINDOW MOVING_WINDOW 8BEGINDBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
- window_size =>7,
- dbid =>41924548);
- END;/--window_size为天,只能够小于等于当前快照保留时间,否则报错,如下:ERROR at line 1:
- ORA-13541: system moving window baseline size (864000)
- greater than retention (691200)
- ORA-06512: at "SYS.DBMS_WORKLOAD_REPOSITORY", line 686
- ORA-06512: at line 2
- BEGINDBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
- start_time => TO_DATE ('2017-04-14 17:00:00','yyyy-mm-dd hh24:mi:ss'),
- end_time => TO_DATE ('2017-04-14 19:00:00','yyyy-mm-dd hh24:mi:ss'),
- baseline_name =>'baseline_140414',
- template_name =>'template_140414',
- expiration =>10,
- dbid =>41924548);
- END;/--如果创建基线样本时间小于当前时间,则收到如下错误ERROR at line 1:
- ORA-13537: invalid input forcreatebaseline template (end_time, end_timeisless than SYSDATE)
- ORA-06512:at "SYS.DBMS_WORKLOAD_REPOSITORY", line768ORA-06512:at "SYS.DBMS_WORKLOAD_REPOSITORY", line818ORA-06512:atline2
在上面的示例中,我们创建了一个单一的基线样本,并且指定了相应的时间范围,基线的名称及保留期限等。那么在这个时间范围内的相应的快照会被保留,同时这个基线可以用于后续在发现性能问题的时候进行比对。
重复的基线样本指的是在将来某个特定的时间范围内,Oracle 会参照这个设定的样本自动为我们创建基线。比如,可以创建一个重复的基线样本,使得在 2017 年每周一 9:00-11:00 自动生成基线。
- SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
- BEGIN
- DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
- day_of_week =>'monday',
- hour_in_day =>9,
- duration =>2,
- expiration =>30,
- start_time =>'2017-04-14 09:00:00',
- end_time =>'2017-12-31 11:00:00',
- baseline_name_prefix =>'baseline_2017_mondays_',
- template_name =>'template_2017_mondays',
- dbid =>41924548);
- END;
- /
- -- Author : Leshami
- -- Blog : http://blog.csdn.net/leshami-- QQ(Weixin) :645746311--查看已经创建的基线样本
- SQL> select t.template_name,2t.template_type,3t.start_time,4t.end_time,5t.day_of_week,6t.hour_in_day,7t.duration8from dba_hist_baseline_template t;
- TEMPLATE_NAME TEMPLATE_ START_TIME END_TIME DAY_OF_WE HOUR_IN_DAY DURATION
- --------------------- --------- ------------------- ------------------- --------- ----------- --------
- template_140414 SINGLE2017-04-14 17:00:00 2017-04-14 19:00:00template_2017_mondays REPEATING2017-04-14 09:00:00 2017-12-31 11:00:00MONDAY17 3
在上面的示例中我们创建了一个重复从 2017 年 4 月 14 日起的每周一 (day_of_week) 会自动生成一个基线,其开始时间为 9 点(hour_in_day),其持续时间为 2 小时(duration),有效期为 30 天(expiration),整个基线的起止时间范围为:2017-04-14 09:00:00 至 2017-12-31 11:00:00,同时也指定了基线样本的名称以及基线前缀名称。
- BEGINDBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
- template_name =>'template_140414',
- dbid =>41924548);
- END;/
在上面的示例中我们删除之前创建的基线样本,通过指定样本名称即可。
AWR 快照的数据全部填充在 SYSAUX 表空间。因此如果要保留的快照越久,意味着需要占用的 SYSAUX 空间越大。同时可以通过 awrinfo.sql 查看各个对象占用 SYSAUX 的详细信息。
- SQL> @?/rdbms/admin/awrinfo.sqlThis script will report general AWR information
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- Specify the Report File Name
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~The default report file name is awrinfo.txt. To use this name,
- press to continue, otherwise enter an alternative.
- Enter value for report_name:
- Using the report name awrinfo.txt
- No errors. -- Author : Leshami
- No errors. -- Blog : http://blog.csdn.net/leshami
- ~~~~~~~~~~~~~~~ -- QQ : 645746311AWR INFO Report
- ~~~~~~~~~~~~~~~Report generated at
- 19:48:53 on Apr 14, 2017 ( Friday ) in Timezone +08:00Warning: Non Default AWR Setting!
- --------------------------------------------------------------------------------Snapshot interval is 60 minutes and Retention is 8 days DB_ID DB Name HOST_PLATFORM INST STARTUP_TIME LAST_ASH_SID PAR
- ------------ ------- ----------------------- ---- ----------------- ------------ ---* 41924548 ORA11G ydq - Linux x86 64-bit 1 15:18:26 (04/07) 617410 NO
- ########################################################
- (I) AWR Snapshots Information
- ########################################################
- *****************************************************
- (1a) SYSAUX usage - Schema breakdown (dba_segments)
- *****************************************************
- |
- | Total SYSAUX size 617.4 MB ( 2% of 32,768.0 MB MAX with AUTOEXTEND ON )
- |
- | Schema SYS occupies 206.6 MB ( 33.5% )
- | Schema XDB occupies 157.7 MB ( 25.5% )
- | Schema APEX_030200 occupies 85.4 MB ( 13.8% )
- | Schema MDSYS occupies 73.9 MB ( 12.0% )
## 四、生成 AWR 报告
- --单实例下生成AWR报告SQL> @?/rdbms/admin/awrrpt.sql
- --RAC环境下生成AWR报告SQL> @$ORACLE_HOME/rdbms/admin/awrgrpt.sql
- --指定数据库实例生成AWR报告SQL> @$ORACLE_HOME/rdbms/admin/awrrpti.sql
- --生成SQL语句AWR报告SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
- --指定实例生成SQL语句AWR报告SQL> @$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
- --生成比较的AWR报告SQL> @$ORACLE_HOME/rdbms/admin/awrddrpt.sql
- --RAC环境下生成比较的AWR报告@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql
v$active_session_history : 显示活跃的数据库会话的活动,每秒采样一次
v$metric 和 v$metric_history:
提供度量数据来跟踪系统性能。视图被组织成好几个组,这些组定义在 v$metricgroup 视图中
DBA_HIST_ACTIVE_SESS_HISTORY
展示内存中活动会话历史信息
DBA_HIST_BASELINE 展示捕获的基线的信息
DBA_HIST_BASELINE_DETAILS
展示特定基线的明细信息
DBA_HIST_BASELINE_TEMPLATE
基线模板相关信息
DBA_HIST_DATABASE_INSTANCE
数据库环境
DBA_HIST_DB_CACHE_ADVICE
根据历史数据预测在不同的 cache size 下的物理读
DBA_HIST_DISPATCHER
每个 snapshot 下调度进程的信息
DBA_HIST_DYN_REMASTER_STATS
动态 remastering 进程的统计信息
DBA_HIST_IOSTAT_DETAIL 按未见类型和功能来统计的历史 I/O 信息
DBA_HIST_SHARED_SERVER_SUMMARY
共享服务器的统计信息
DBA_HIST_SNAPSHOT
快照信息
DBA_HIST_SQL_PLAN
执行计划
DBA_HIST_WR_CONTROL
AWR 控制信息
Oracle AWR 特性描述 Linux/Unix shell 自动发送 AWR report Linux/Unix shell 自动发送 AWR report(二)
来源: http://blog.csdn.net/leshami/article/details/70578291