AWR( Automatic Workload Repository ) 是 Oracle 10g 新提供的收集数据库 统计信息的工具。它主要包括 AWR 内存区 , 历史数据存储文件和 ASH 等部件。
AWR 报告的主要内容包括以下几部分 ,
前言部分 : 这是 AWR 报告的第一段 , 用于描述环境包括数据库名 , 数据库版本 , 是否为 RAC 节点 , 快照报告的采集时间等。
综述部分 : 包含等待事件段 ,Load Profile 段 , 实例效率统计段 ,Shared Pool 统计段 ,Cache Size 段 , 其中最重要的是等待事件段 , 它告诉我们在快照时间内数据库遇到哪些性能瓶颈 , 它们将是性能调整或问题诊断的主要候选对象。以下 Top Time Event 数据摘自我的数据库产生的 AWR 报告。
Event | Waits | Time(s) | Avg Wait(ms) | % Total Call Time | Wait Class |
CPU time |
| 17,306 |
| 99.6 |
|
db file scattered read | 19,469,037 | 4,448 | 0 | 25.6 | User I/O |
log file parallel write | 492,258 | 221 | 0 | 1.3 | System I/O |
log file sync | 253,519 | 143 | 1 | .8 | Commit |
read by other session | 421,942 | 73 | 0 | .4 | User I/O |
报告显示 ”db file scattered read” 是这个快照时间内最重要的等待事件 , 这种等待是由于会话在等待一个 ” multiblock IO” 的完成 , 通常这是由于在大表上执行全表扫描或索引快速扫描引起。接下来可以查看哪些 SQL 执行这些查询 , 查询操作集中在哪些表上 , 检查 SQL PLAN 看是否使用了索引。
SQL 部分: 无效的 SQL 语句是性能不好的主要原因 , 这部分对这段时间区间内的 SQL 按照执行时间 , 逻辑读 , 磁盘读等指标进行了分类和排序 , 和 STATSPACK 不同的是 , 从 AWR 报告中可以直接查到该 SQL 的文本和发送请求的客户端进程信息 , 极大的提高了 SQL 分析的效率。
实例活动统计部分: 这部分是快照期间 , 对实例的各个内部模块的活动和各种资源使用情况的统计 , 主要包括 CPU 使用情况 ,SQL*Net 消息 , 链接的行存取和 PGA 使用情况。
段统计部分: 告诉哪些段 ( 包括表和索引 ) 在快照期间经历最高的磁盘读操作 , 这些信息可以帮助我们决定是否需要重建索引 , 或对段进行分区来减少发生在这些数据文件上的 I/O 。
AWR 地一些常用操作主要包括:
修改快照的收集和保存时间,创建 Baseline, 导出并迁移 AWR 数据。下面介绍一下这些功能使用方法。
默认情况下 AWR 每隔 1 小时自动收集一个系统负载快照 , 并且此快照默认保存一周。但 Oracle10g 提供以下命令可以修改快照收集时间间隔和保存时间。
execute dbms_workload_repository.modify_snapshot_settings(interval => 120,retention => 20160);
上述命令修改快照的收集间隔为 2 小时 , 保存时间为两周。
可以为 AWR 数据创建 baseline, 保存这些数据用于将来分析和比较。具体命令如下,
execute dbms_workload_repository.create_baseline (start_snap_id =>1, end_snap_id =>100, baseline_name => 'baseline name', dbid => yourdbid);
可以将 AWR 数据导出并迁移到其它数据库以便于以后分析。 Oracle10gRelease2 提供两个新工具来完成导出和迁移。 AWR 数据的工作。
DBMS_SWRF_INTERNAL.AWR_EXTRACT 用来导出数据 , 其使用方法如下 ,
Begin
DBMS_SWRF_INTERNAL.AWR_EXTRACT (
dmpfile => 'awr_data.dmp',
dmpdir => 'TMP_DIR',
bid => 302,
eid => 305);
end;
其中, dmpfile 参数用于指定将要导出的 AWR 数据文件的名字, dmpdir 是指定存放导出文件的目录路径, bid 是起始快照编号, eid 是结束快照编号。
DBMS_SWRF_INTERNAL 用来迁移 AWR 数据文件到其他 数据库。导入 AWR 数据的过程分为两个步骤,首先使用 DBMS_SWRF_INTERNAL.AWR_LOAD 方法把数据导入到一个临时模式中,本例是 AWR_TEST( 也可以自己定义名称 ) ,具体方法如下,
begin
DBMS_SWRF_INTERNAL.AWR_LOAD (
SCHNAME => 'AWR_TEST',
dmpfile => 'awr_data',
dmpdir => 'TMP_DIR');
end;
接下来把需要把 AWR 数据转移到 SYS 模式中,操作方法如下,
exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'TEST'); 这样 AWR 数据的导入工作已经完成,现在可以使用这种方法建立一个专门存放 AWR 数据的数据库,用于集中管理和分析多个数据库实例的性能统计数据。