AWR 性能报告与小技巧

来源:这里教程网 时间:2026-03-03 23:02:22 作者:

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_secFROM sysstatWHERE (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 数据库的性能!

  • 相关推荐