Automatic Workload Repository(AWR)收集、处理和维护性能系统信息,为性能调优的问题检测提供了有力的帮助。
AWR收集和处理的统计信息包括:
1. 段的统计信息;
2. 时间模型统计信息(在v$sys_time_model和v$sess_time_model视图中查看);
3. 一些在v$sysstat和v$sesstat视图中收集的系统和会话的统计信息;
4. 系统中负载最高的一些sql语句,分别按执行时间、cpu时间、执行次数等标准来统计
5. ASH统计信息,包含近期会话活动的历史记录
若系统参数STATISTICS_LEVEL设置为TYPICAL或ALL将默认启用AWR来采集数据库统计信息。这个参数的默认值是TYPICAL,若将其设置为BASIC,将禁用很多oracle数据库功能,包括 AWR,但你仍可以通过DBMS_WORKLOAD_REPOSITORY包来手动获得AWR统计信息。但是,由于许多内存中的统计信息(比如段统计信息和内存顾问信息)会被禁用,快照中获得的统计信息可能不完整。
快照(snapshots)
快照是特定时间范围内的历史数据集合,再由ADDM进行性能比较。默认情况下,数据库每个小时产生一次快照,并将这些统计信息在工作量仓库中保留8天。你也可以手动创建快照,但这通常是不必要的。然后这些快照之间的信息将交给Automatic Database Diagnostic Monitor (ADDM) 进行分析。
AWR比较快照间信息的差异,然后获取对系统负载影响最大的一些sql语句,而不是获取所有sql语句,降低了统计的时间。
基线(Baselines)
基线包含了一个特定时间范围的性能数据,用来在性能问题发生时,与其他类似的时间段进行比较。基线中的快照会被自动AWR清除进程排除,并无限期保留。
oracle数据库中包含了三种类型的基线:
固定基线(Fixed Baselines)
固定基线相当于被指定的过去的一个固定的、连续的时间范围。在创建固定基线以前,要慎重考虑这个时间段,因为基线代表了一个理想状态的系统状态。之后,你可以用这个基线和其他基线或者某个时间范围内的快照来分析性能上的退化情况。
移动窗口基线(Moving Window Baseline)
移动窗口基线相当于AWR保留期间内存在的所有AWR数据。在使用自适应阈值时,这将很有用处,因为数据库可以使用AWR保留期间的所有AWR数据来计算出度量阈值。oracle数据库自动维护一个系统定义的移动窗口基线。系统定义的移动窗口基线的默认窗口大小等于当前AWR保留的时间,默认为8天。如果你要使用自适应阈值,可以考虑使用更大的移动窗口,例如30天,可以更精确地计算出阈值。你可以改变移动窗口的大小,这个值要等于或小于AWR保留天数。因此若你需要增大移动窗口的大小,首先需要增加AWR的保留时间。
基线模板(Baseline Templates)
你可以创建一个基线,作为未来一个时间连续的时间段可以使用的基线模板。有两种类型的基线模板:单一的和重复的。你可以为未来一个单独的连续时间段的基线创建单一基线模板。如果你要提前准备获取一个未来的时间段,这个技术会很有用处。例如,你安排好要在周末进行一个系统测试,并准备获取AWR数据,这种情况下,你可以创建一个单一基线模板,用以在测试时自动获取该时间范围内的数据。你也可以使用重复基线模板来创建或者删除一个重复的时间计划,当你想自动获取一个连续的时间范围,这将很有用。例如,你可能希望在一个月里的每周一早晨获取AWR数据,这种情况下,你可以创建一个重复基线模板来自动为每个周一创建基线,并且在设置了过期时间(例如一个月)后,自动删除过期的基线。
自适应阈值(Adaptive Thresholds)
自适应阈值可以帮你以最低的开销监控和检测出性能问题。自适应阈值能够从在移动窗口基线捕获到的度量值里得到的统计信息中,为系统度量自动设置警告和关键报警(warning and critical alert)的阈值。这些统计信息每周会重新生成,并可能由于系统性能随着时间变化改变,而产生新的阈值。
打个比方,很多数据库白天是一个OLTP系统,而到晚上需要执行一些批量进程(例如生成报表)。每个事务响应时间的性能度量对检测OLTP的性能退化问题在白天可能很有用,但是这个阈值常常对于批量工作来说会太低,而频繁触发报警。自适应阈值能检测到这样的工作量模式,并自动为白天和夜里设置不同的阈值。
自适应阈值的类型有两种:
最大值的百分比:阈值以最大值的百分比倍数的方式来计,
重要性级别:阈值被设为一个统计学中的百分位来观察基于移动窗口基线数据的阈值以上的值,来体现异常程度。百分位能指定为以下几种:高(0.95),100个中只有5个能超过这个值;非常高(0.99):100个中只有1个能超过这个值;严重的(0.999):1000个钟只有1个能超过这个值;极端的(0.9999):10000个钟只有1个能超过这个值。
当一个系统以高峰期工作量来设计的,并且你希望在当前工作量接近或超过先前的高值时触发报警,最大值百分比阈值将非常有用。例如,每秒产生redo量的度量就是个典型的例子。
重要性级别阈值在以下情况很有用:当系统运行正常时表现得很稳定,但当性能变差时可能会在一个大范围内波动。例如,每个事务的响应时间的度量在一个优化过的OLTP系统上将表现平稳,但当性能问题凸显时,可能会波动很大。采用重要性级别阈值,当环境产生不正常的度量值和系统性能时触发报警。
空间消耗(Space Consumption)
以下因素可以被用来判断AWR的空间消耗:在任一给定时间系统中的活动会话数;快照时间间隔,时间间隔越小,快照产生越频繁,增加AWR采集的数据的占用空间;历史数据保留时间
默认情况下,快照每小时捕获一次,并在数据库中保存8天。使用这些默认设置,一个典型的并发量为10个会话数的系统大约需要200-300M的空间来存放AWR数据。但是在降低保留时间的时间,请注意,若AWR中的数据不足,可能会影响一些组件和功能的准确性和精确度:ADDM、SQL Tuning Advisor、Undo Advisor、Segment Advisor。
可能的话,Oracle建议将AWR保留时间设得足够来,至少能捕获一个完整的工作量周期。当你的系统工作量周期为1周,比如工作日是OLTP的工作负荷,而在周末运行批量工作,则默认的8天保留时间不需要去修改。当如果你的系统的高峰期在每个月的月末,那么你可能需要将这个保留时间更改到1个月。
例外情况下,你可以将快照时间间隔改成0来关闭自动收集快照。在这种情况下,工作量和统计数据的自动收集将被停止,且许多Oracle数据库的自动管理功能将不能使用。另外,你不能手动创建快照,因此Oracle强烈建议不要关闭snapshot的自动收集。
管理工作量仓库
管理快照
管理基线
创建基线
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 270,end_snap_id => 280, baseline_name => 'peak baseline',
dbid => 3310949047, expiration => 30);
删除基线
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047); --若cascade指定为true,将同时删除关联的快照
重命名基线
DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
old_baseline_name => 'peak baseline',
new_baseline_name => 'peak mondays',
dbid => 3310949047);
显示基线度量
select * from table(DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS (
baseline_name => 'peak baseline',
dbid => 3310949047,
instance_num => '1'));
修改默认移动窗口基线的窗口大小
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
window_size => 30,
dbid => 3310949047); --window_size单位是天,这个参数值必须小于等于当前AWR的保留时间
管理基线模板
start_time => '2009-04-02 17:00:00 PST',
end_time => '2009-04-02 20:00:00 PST',
baseline_name => 'baseline_090402',
template_name => 'template_090402', expiration => 30,
dbid => 3310949047); --若不指定expiration参数,创建的基线将不会过期
创建重复基线模板
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'monday', hour_in_day => 17,
duration => 3, expiration => 30,
start_time => '2009-04-02 17:00:00 PST',
end_time => '2009-12-31 20:00:00 PST',
baseline_name_prefix => 'baseline_2009_mondays_',
template_name => 'template_2009_mondays',
dbid => 3310949047); --duration参数单位为小时
删除基线模板
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
template_name => 'template_2009_mondays',
dbid => 3310949047);
传输AWR数据
AWR相关视图
v$metric和v$metric_history
提供度量数据来跟踪系统性能。视图被组织成好几个组,这些组定义在v$metricgroup视图中
DBA_HIST视图
- 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控制信息
生成AWR报告
- 1. At the SQL prompt, enter:
- @$ORACLE_HOME/rdbms/admin/awrrpt.sql
- 2. Specify whether you want an HTML or a text report:
- Enter value for report_type: text
- In this example, a text report is chosen.
- 3. Specify the number of days for which you want to list snapshot IDs.
- Enter value for num_days: 2
- A list of existing snapshots for the specified time range is displayed. In this
- example, snapshots captured in the last 2 days are displayed.
- 4. Specify a beginning and ending snapshot ID for the workload repository report:
- Enter value for begin_snap: 150
- Enter value for end_snap: 160
- In this example, the snapshot with a snapshot ID of 150 is selected as the
- beginning snapshot, and the snapshot with a snapshot ID of 160 is selected as the
- ending snapshot.
- 5. Enter a report name, or accept the default report name:
- Enter value for report_name:
- Using the report name awrrpt_1_150_160
- In this example, the default name is accepted and an AWR report named
- awrrpt_1_150_160 is generated.
生成 RAC环境下的报告:@$ORACLE_HOME/rdbms/admin/awrgrpt.sql
生成指定实例的RAC AWR报告@$ORACLE_HOME/rdbms/admin/awrgrpti.sql
生成一条sql语句的AWR报告@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql --需要指定sql_id
生成指定实例中的sql语句的AWR报告@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
生成AWR对比报告
我们还可以通过生成AWR对比报告,将出现性能问题的两个snapshot间的统计信息与前面比较正常的两个snapshot间的统计信息进行比较。
生成AWR对比报告的过程如下:
- 1. At the SQL prompt, enter:
- @$ORACLE_HOME/rdbms/admin/awrddrpt.sql
- 2. Specify whether you want an HTML or a text report:
- Enter value for report_type: html
- In this example, an HTML report is chosen.
- 3. Specify the number of days for which you want to list snapshot IDs in the first
- time period.
- Enter value for num_days: 2
- A list of existing snapshots for the specified time range is displayed. In this
- example, snapshots captured in the last 2 days are displayed.
- 4. Specify a beginning and ending snapshot ID for the first time period:
- Enter value for begin_snap: 102
- Enter value for end_snap: 103
- In this example, the snapshot with a snapshot ID of 102 is selected as the
- beginning snapshot, and the snapshot with a snapshot ID of 103 is selected as the
- ending snapshot for the first time period.
- 5. Specify the number of days for which you want to list snapshot IDs in the second
- time period.
- Enter value for num_days2: 1
- A list of existing snapshots for the specified time range is displayed. In this
- example, snapshots captured in the previous day are displayed.
- 6. Specify a beginning and ending snapshot ID for the second time period:
- Enter value for begin_snap2: 126
- Enter value for end_snap2: 127
- 7. Enter a report name, or accept the default report name:
- Enter value for report_name:
- Using the report name awrdiff_1_102_1_126.txt
- In this example, the default name is accepted and an AWR report named
- awrdiff_1_102_126 is generated.
RAC下的对比报告@$ORACLE_HOME/rdbms/admin/awrgdrpt.sql
指定实例 @$ORACLE_HOME/rdbms/admin/awrddrpi.sql
RAC指定实例@$ORACLE_HOME/rdbms/admin/awrgdrpi.sql
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/22578826/viewspace-749097/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/22578826/viewspace-749097/