1.自动负载信息库的概述
自动负载信息库(AWR:Automatic Workload Repository)收集、处理和维护性能统计信息,用于问题检测和自行调优。
这些数据存储在内容和数据库中,这些捕获的属性可以显示在报表和视图上。
AWR收集和处理的统计信息包括:
- 对象统计
- 时间模型统计
- 系统和会话统计
- 获取会话历史统计
自动工作负载信息库默认是启用的,由STATISTICS_LEVEL
初始化参数控制。
- 该
STATISTICS_LEVEL
初始化参数应该设置为TYPICAL
或ALL
,启用AWR统计收集。默认这是为TYPICAL
。 - 该
STATISTICS_LEVEL
参数设置为BASIC禁用许多Oracle数据库功能,包括AWR,不推荐使用。如果STATISTICS_LEVEL
参数设置为BASIC,你仍然可以通过设置DBMS_WORKLOAD_REPOSITORY
参数用于手动捕获AWR统计。但是,由于在内存中许多系统的统计数据是被禁用,例如段统计和内存顾问信息,这些快照捕获的统计数据可能是不完全的。
自动负载信息库包括以下内容:
- 快照
- 基线
- 自适应阀值
- 空间消耗
1.1 快照
快照是ADDM用于性能比较的指定期间的一组历史数据。默认情况下,Oracle数据库每个小时自动产生一次快照,并保留8天负载统计信息。你也可以手动创建快照,但通常是没有必要的。在快照间隔产生的数据,通过自动数据库诊断器进行分析。
AWR比较不同快照之间的差异来确定捕获影响系统负载的SQL语句,逐渐减少被捕获的SQL语句。
1.2 基线
基线包含来自指定期间保存性能数据,当出现性能问题时,用于与其他相似的负载期间进行比较。快照中包含的基线自动为WAR清除进程排除,并永久保留。
有以下这种基线类型:
- 固定基线(Baselined)
- 移动窗口基线
- 模板基线
1.3 子适应阀值
启用自适应阀值,你可以监控和检测性能问题,同时可以最大限度地减少管理开销。自适应阀值可以针对已些系统指标自动设置警告和严重警告阀值。
1.4 空间消耗
自动负载信息库的空间消耗有以下几个因素:
- 系统中活动时间的会话数
- 快照间隔(Snapshot Retention)
- 历史数据的保留期
2. 管理自动负载信息库(AWR)
如何管理自动负载信息库包含以下几个方面:
- 管理快照
- 管理基线
- 管理基线模板
- 传输自动负载信息库数据
- 使用自动负载信息库视图
- 生成自动负载信息库报表
- 生成自动负载信息库比较期间报表
- 生成活动会话历史表表
- 使用活动会话历史表表
2.1 管理快照
默认情况下,Oracle数据库每个小时产生一次快照,并在负载信息库中保留8天。必要时,可以通过DBMS_WORKLOAD_REPOSITORY
过程手动创建,删除和修改快照。要调用该过程,用户必须要有DBA的权限。
管理快照的主要界面是Oracle企业管理器。只要有可能,应该使用Oracle企业管理器来管理快照。如果Oracle企业管理器不可用,则可以使用DBMS_WORKLOAD_REPOSITORY
包管理快照。
2.1.1 创建快照
如果你想捕获不是系统自动生成的快照,可以通过CREATE_SNAPSHOT
过程手动创建快照。例如:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT ();
END;
2.1.2删除快照
你可以使用DROP_SNAPSHOT_RANGE删除一个范围内的快照,查看快照ID列表以及数据库ID,检查DBA_HIST_SNAPSHOT视图。你可以删除以下范围的快照:
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE (
low_snap_id => 22,
high_snap_id => 32,
dbid => 3310949047
);
END;
2.1.3修改快照设置
你可以调用间隔,保留期和捕获指定数据库ID的顶层SQL。但要注意这可能会影响Oracle诊断工具的使用。
-
INTERVAL
设置快照自动生成的频率,以分钟为单位。 -
RETENTION
设置负载信息库保留的期限,以分钟为单位。 -
TOPNSQL
设置刷新最高的SQL。
使用MODIFY_SNAPSHOT_SETTINGS
过程调整设置。如下:
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS(
retention => 43200,
interval => 30,
topnsql => 100,
dbid => 3310949047
);
END;
在这个例子中,保留期限被指定为43200分中(30天),每个快照之间的间隔被指定为30分钟。你可以查询DBA_HIST_WR_CONTROL
视图查看数据库实例的当前设置。
2.2 管理基线
管理基线的主要界面是Oracle企业管理器(Oracle EM Manager)。只要有可能,应该使用Oracle企业管理器来管理基线。如果Oracle企业管理器不可用,则可以使用DBMS_WORKLOAD_REPOSITORY
包管理快照。
2.2.1 创建基线
如果使用已存在的一个快照范围创建基线。
- 检阅
DBA_HIST_SNAPSHOT
视图中已存在的快照,以确定你想要使用的快照范围。 - 使用
CREATE_BASELINE
过程来创建期望快照范围基线。
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE (start_snap_id => 270,
end_snap_id => 280, baseline_name => 'peak baseline',
dbid => 3310949047, expiration => 30);
END;
2.2.2 删除基线
如果删除一个已存在的基线:
- 检阅DBA_HIST_SNAPSHOT视图中已存在的基线,以确定你想要删除的基线。
- 使用DROP_BASELINE 过程删除期望的基线。
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE (baseline_name => 'peak baseline',
cascade => FALSE, dbid => 3310949047);
END;
2.2.3 重名基线
如何重名基线:
- 检查
DBA_HIST_SNAPSHOT
视图中已存在的基线,以确定你想要重名的基线。 - 使用
DROP_BASELINE
过程删除期望的基线。
BEGIN
DBMS_WORKLOAD_REPOSITORY.RENAME_BASELINE (
old_baseline_name => 'peak baseline',
new_baseline_name => 'peak mondays',
dbid => 3310949047);
END;
2.2.4 显示基线度量
如何显示在一个时间段中捕获的基线度量阀值。
- 检查
DBA_HIST_SNAPSHOT
视图中已存在的基线,以确定你想要显示的基线的度量信息。 - 使用
SELECT_BASELINE_METRICS
函数显示期望的度量信息。
BEGIN
DBMS_WORKLOAD_REPOSITORY.SELECT_BASELINE_METRICS (
baseline_name => 'peak baseline',
dbid => 3310949047,
instance_num => '1');
END;
2.2.4 修改移动窗口基线的默认窗口大小
使用MODIFY_BASELINE_WINDOW_SIZE
过程修改移动窗口的默认大小。
BEGIN
DBMS_WORKLOAD_REPOSITORY.MODIFY_BASELINE_WINDOW_SIZE (
window_size => 30,
dbid => 3310949047);
END;
2.3 管理基线模板
这个功能中你可以使用基线模板自动创建基线来捕获指定时间段。
2.3.1 创建单个基线模板
使用CREATE_BASELINE_TEMPLATE
过程创建单个基线模板:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
start_time => '2007-04-02 17:00:00 PST',
end_time => '2007-04-02 20:00:00 PST',
baseline_name => 'baseline_070402',
template_name => 'template_070402', expiration => 30,
dbid => 3310949047);
END;
2.3.2 创建多个基线模板
使用CREATE_BASELINE_TEMPLATE
过程创建多个基线模板:
BEGIN
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE_TEMPLATE (
day_of_week => 'monday', hour_in_day => 17,
duration => 3, expiration => 30,
start_time => '2007-04-02 17:00:00 PST',
end_time => '2007-12-31 20:00:00 PST',
baseline_name_prefix => 'baseline_2007_mondays_',
template_name => 'template_2007_mondays',
dbid => 3310949047);
END;
2.3.3 删除基线模板
如何删除一个已存在的基线模板。
- 检查
DBA_HIST_SNAPSHOT
视图中已存在的基线,以确定你想要删除的基线模板。 - 使用
DROP_BASELINE_TEMPLATE
删除期望的基线模板。
BEGIN
DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE_TEMPLATE (
template_name => 'template_2007_mondays',
dbid => 3310949047);
END;
2.4 传输自动负载信息库数据
Oracle数据允许系统之间传递AWR数据,你想使用单独的系统来执行AWR数据分析的情况下非常有用。传输AWR数据,你必须先从原系统数据库上提取AWR快照数据,然后在加载到目标系统数据库上。
2.4.1 提取数据
该awrextr.sql
脚本从数据库中提取一个快照范围的AWR数据到数据备份导出文件中。一旦被创建,这个备份文件可以被传输到另一个系统,可以加载所提取的数据。要运行awrextr.sql这个脚本,必须以SYS用户连接到数据库。
提取AWR数据:
1.在SQL提示符下,输入
@$ORACLE_HOME/rdbms/admin/awrextr.sql
显示AWR模式下的数据库列表
2.指定将要提取AWR数据的数据库
Enter value for db_id: 1377863381
3.指定你要列出快照ID的天数
Enter value for num_days: 2
4.指定开始和结束快照ID,定义的AWR数据的快照范围。
Enter value for begin_snap: 30
Enter value for end_snap: 40
5.目录对象列表
目录对象指导出备份文件存储的目录
Enter value for directory_name: DATA_PUMP_DIR
6.指定导出文件名称的前缀(自动附件.dmp后缀)
Enter value for file_name: awrdata_30_40
2.4.2 加载数据
一旦导出备份文件爱你被传输到目标系统,则可以使用awrload.sql
脚本加载提取的AWR数据。该awrload.sql
脚本首先会创建一个暂存模式,并将快照数据从导出备份文件传输到数据库中。然后将数据库从暂存模式传输到AWR相应的表中。要运行awrload.sql
脚本,必须使用SYS用户连接数据库。
加载数据:
- 在SQL提示符下,输入:
@$ORACLE_HOME/rdbms/admin/awrload.sql
- 指定导出本备份文件放置目录的目录对象
Enter value for directory_name: DATA_PUMP_DIR
- 指定导出备份文件名称的前缀(自动附件.dmp后缀)
Enter value for file_name: awrdata_30_40
- 指定加载AWR数据的暂存模式
Enter value for schema_name: AWR_STAGE
- 指定暂存模式的默认表空间
Enter value for default_tablespace: SYSAUX
- 指定暂存模式的临时表空间
Enter value for temporary_tablespace: TEMP
- 一个名为
AWR_STAGE
的模式将被创建,并加载AWR数据。AWR数据被加载到AWR_STAGE模式之后,数据将被转移到SYS模式下的AWR表中。
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Completed 113 CONSTRAINT objects in 11 seconds
Processing object type TABLE_EXPORT/TABLE/CONSTRAINT/REF_CONSTRAINT
Completed 1 REF_CONSTRAINT objects in 1 seconds
Job "SYS"."SYS_IMPORT_FULL_03" successfully completed at 09:29:30
... Dropping AWR_STAGE user
End of AWR Load
2.5 使用自动负载信息库视图
通常情况下,使用Oracle企业管理器或AWR表报查看AWR数据。然而,你也可以使用以下的视图查看统计信息:
- V$ACTIVE_SESSION_HISTORY
- V$METRICGROUP 视图,提供度量数据跟踪系统性能
- DBA_HIST视图
DBA_HIST视图显示数据库中保存的历史数据,包括以下几个视图组:
- DBA_HIST_ACTIVE_SESS_HISTORY 限制最近活动系统的内存活动会话内容的历史信息
- DBA_HIST_BASELINE 显示系统中捕获的基线信息
- DBA_HIST_BASELINE_DETAILS 显示基线的详细信息
- DBA_HIST_BASELINE_TEMPLATE 显示用于生成基线的基线模板信息
- DBA_HIST_DATABASE_INSTANCE 显示数据库环境信息
- DBA_HIST_SNAPSHOT 显示系统中的快照信息
- DBA_HIST_SQL_PLAN 显示SQL执行计划
- DBA_HIST_WR_CONTROL 显示AWR控制的设置信息
2.6 生成自动负载信息库报告
一个AWR报告显示两个快照(或两个时间点)之间的捕获数据,AWR报告分为多部分。HTML报告包含快速浏览章节的导航链接。该报告内容包含选定范围快照的系统负载概括。
2.6.1 生成快照范围的AWR报告
awrrpt.sql脚本生成一个HTML或文本格式的快照范围统计报告。
生成快照范围的AWR报告:
- 在SQL提示符下,输入
@$ORACLE_HOME/rdbms/admin/awrrpt.sql
- 指定HTML或文本报告
Enter value for report_type: html(可以输入html/text)
- 指定你要列出快照ID的天数
Enter value for num_days: 2
- 指定负载信息库报告的开始和结束快照ID
Enter value for begin_snap: 30
Enter value for end_snap: 40
- 输入报告名称,或者使用默认报告名称
Enter value for report_name:
Using the report name awrrpt_1_150_160
默认存储在SQLPLUS的当前目录中。如果想要存储在其他位置,则需要指定报告的绝对路径,
例如:
Enter value for report_name: D:\Chicle Data\awrrpt_1_150_160.html
2.6.2 生成指定实例快照范围的AWR报告
该awrrpti.sql脚本生成一个HTML或文本报告,显示指定数据库和实例的快照ID范围的统计信息。在输入快照范围ID之前,需要先指定数据库和实例。
生成指定实例快照范围的AWR报告:
1.在SQL提示符下,输入
@$ORACLE_HOME/rdbms/admin/awrrpti.sql
2.指定HTML或文本报表
Enter value for report_type: text
显示可用的数据库标识符和实例编号。
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
----------- -------- ------------ ------------ ------------
3309173529 1 MAIN main examp1690
3309173529 1 TINT251 tint251 samp251
- 输入数据库标识符(dbid)和实例编号(inst_num)
Enter value for dbid: 3309173529
Using 3309173529 for database Id
Enter value for inst_num: 1
- 指定你要列出快照ID的天数
Enter value for num_days: 2
- 指定负载信息库报告的开始和结束快照ID
Enter value for begin_snap: 150
Enter value for end_snap: 160
- 输入报告名称,或者使用默认报告名称
Enter value for report_name:
Using the report name awrrpt_1_150_160
2.6.3 生成SQL语句的AWR报告
该awrsqrpt.sql
脚本生成一个HTML或文本报告,显示指定SQL语句的快照ID范围的统计信息。运行此报告,检查和调试SQL语句的性能。
生成SQL语句的AWR报告:
- 在SQL提示符下,输入
@$ORACLE_HOME/rdbms/admin/awrsqrpt.sql
- 指定HTML或文本报表
Enter value for report_type: html
- 指定你要列出快照ID的天数
Enter value for num_days: 1
- 指定负载信息库报告的开始和结束快照ID
Enter value for begin_snap: 146
Enter value for end_snap: 147
- 指定SQL语句的ID
Enter value for sql_id: 2b064ybzkwf1y
- 输入报告名称,或者使用默认报告名称
Enter value for report_name:
Using the report name awrrpt_1_146_147.html
2.6.4 其他AWR报告
类似的AWR报告还有好几个,生成的步骤也差不多,这里就不做详细的介绍:
- 生成指定实例的SQL语句的AWR报告:
@$ORACLE_HOME/rdbms/admin/awrsqrpi.sql
- 生成比较期间的AWR报告:
@$ORACLE_HOME/rdbms/admin/awrddrpt.sql
- 生成指定实例比较期间的AWR报告:
@$ORACLE_HOME/rdbms/admin/awrddrpi.sql
- 生成活动会话历史(ASH)的AWR报告:
@$ORACLE_HOME/rdbms/admin/ashrpt.sql
- 生成指定实例的活动会话历史(ASH)的AWR报告:
@$ORACLE_HOME/rdbms/admin/ashrpti.sql