AWR 性能报告与小技巧
AWR(Automatic Workload Repository)报告是 Oracle 数据库中的一项重要工具,它用于收集数据库性能数据并提供分析。这些报告可以帮助 DBAs(数据库管理员)检测和诊断性能问题,尤其是在需要优化数据库资源和排查性能瓶颈时。AWR 性能报告不仅包含了详细的统计数据,还可以帮助我们对比不同时间段的性能表现,从而找到潜在的性能问题。
1. 手动执行 AWR 快照
AWR 快照是数据库在特定时间点的性能快照。你可以通过手动执行以下命令来创建一个快照:
exec dbms_workload_repository.create_snapshot;
执行此命令后,AWR 快照就会创建,之后可以生成报告用于性能分析。通常,在高负载或者执行关键操作时,DBA 会手动创建 AWR 快照,以便对比不同时间点的数据。
2. 创建 AWR 基线
AWR 基线用于定义性能的基准,可以帮助你比较不同时间段的性能数据。使用以下命令创建一个 AWR 基线:
exec dbms_workload_repository.create_baseline(start_snap_id, end_snap_id, baseline_name);
start_snap_id 和 end_snap_id 是你希望创建基线的 AWR 快照 ID 范围,baseline_name 是为该基线命名的名称。基线有助于确保你对比的时间段是具有代表性的,并且帮助发现性能的变化趋势。
3. 生成 AWR 报告
AWR 报告可以通过多种方式生成。以下是几种常用命令:
-
生成当前实例的 AWR 报告:
@?/rdbms/admin/awrrpt -
生成 RAC 环境下特定实例的 AWR 报告:
@?/rdbms/admin/awrrpti -
生成 AWR 对比报告(用于比较不同时间点的性能差异):
@?/rdbms/admin/awrddrpt -
生成 RAC 环境的全局 AWR 报告:
@?/rdbms/admin/awrgrpt
4. 解读 DB Time
DB Time 是所有前台 session 在数据库调用上的总和时间,包括 CPU 时间、I/O 时间和其他非空闲等待时间。值得注意的是,DB Time 并不等于响应时间。如果 DB Time 高,并不意味着响应时间就慢;如果 DB Time 低,并不意味着响应时间就快。
Average Active Session (AAS) 通过以下公式计算:
AAS = DB Time / Elapsed Time
AAS 是评估系统负载的重要指标。一般来说,AAS 越高,表示系统负载越重。比如,如果 AAS 达到 1000,可能意味着系统已经出现了性能瓶颈,甚至可能进入挂起状态。
5. 查找最近 7 天的 DB Time
通过以下查询,你可以查看过去 7 天内的 DB Time 数据:
WITH sysstat AS (
SELECT sn.begin_interval_time begin_interval_time,
sn.end_interval_time end_interval_time,
ss.stat_name stat_name,
ss.value e_value,
lag(ss.value, 1) OVER (ORDER BY ss.snap_id) b_value
FROM dba_hist_sysstat ss
JOIN dba_hist_snapshot sn
ON ss.snap_id = sn.snap_id
AND ss.dbid = sn.dbid
AND ss.instance_number = sn.instance_number
WHERE trunc(sn.begin_interval_time) >= sysdate - 7
AND ss.stat_name = 'DB time'
AND ss.dbid = (SELECT dbid FROM v$database)
AND ss.instance_number = (SELECT instance_number FROM v$instance)
)
SELECT TO_CHAR(BEGIN_INTERVAL_TIME, 'mm-dd hh24:mi') || TO_CHAR(END_INTERVAL_TIME, ' hh24:mi') date_time,
stat_name,
ROUND((e_value - NVL(b_value, 0)) /
(EXTRACT(DAY FROM (end_interval_time - begin_interval_time)) * 24 * 60 * 60 +
EXTRACT(HOUR FROM (end_interval_time - begin_interval_time)) * 60 * 60 +
EXTRACT(MINUTE FROM (end_interval_time - begin_interval_time)) * 60 +
EXTRACT(SECOND FROM (end_interval_time - begin_interval_time))), 0) per_sec
FROM sysstat
WHERE (e_value - NVL(b_value, 0)) > 0
AND NVL(b_value, 0) > 0;
这个查询可以帮助你查看最近 7 天内每个时间区间的 DB Time。根据 DB Time 数据,你可以评估数据库的整体负载情况,从而做出相应的优化调整。
总结
AWR 性能报告是 Oracle 数据库性能分析的重要工具,DBAs 可以通过手动创建快照、生成报告和基线来帮助排查数据库性能瓶颈。理解 DB Time 和 AAS 等关键指标能够帮助我们更好地分析数据库负载。使用 AWR 工具,DBAs 可以快速识别数据库问题并采取有效措施进行优化。
希望本文的 AWR 性能报告技巧和查询方法能帮助你更好地管理和优化 Oracle 数据库的性能!




