介绍

AWR、ASH 和 ADDM 是 Oracle 数据库性能诊断和优化的重要工具,它们可以帮助您达到以下目标:

  1. 性能监控:这些工具提供了关于数据库性能的详细信息,例如等待事件、SQL 查询的执行统计、系统和会话的活动等。你可以使用这些信息来监控数据库的性能,例如检查是否有性能瓶颈,或者追踪性能的变化趋势。
  2. 性能诊断:如果数据库的性能出现问题,例如响应时间变慢或 CPU 利用率过高,你可以使用这些工具来诊断问题的原因。例如,你可以查看等待事件和 SQL 查询的统计信息,找出消耗资源最多的操作。
  3. 性能优化:这些工具不仅提供了诊断性能问题的信息,还提供了优化建议。例如,ADDM 可以自动分析 AWR 数据,识别出性能问题,并提供优化建议。你可以根据这些建议来优化数据库的配置或 SQL 查询。
  4. 问题排查:在出现问题时,例如数据库挂起、事务失败等,可以使用这些工具来排查问题的原因。例如,ASH 提供了活动会话的历史信息,你可以查看在问题发生时会话的状态和活动。

AWR

使用方式

假设你需要分析 Oracle 数据库在过去一个小时内的性能状况。你可以生成一个 AWR 报告来查看这段时间内的数据库统计信息和性能数据。

1、首先,获取需要的快照 ID。执行以下 SQL 查询:

SELECT SNAP_ID, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME
FROM DBA_HIST_SNAPSHOT
WHERE BEGIN_INTERVAL_TIME >= SYSTIMESTAMP - INTERVAL '1' HOUR
ORDER BY SNAP_ID;

这将列出过去一个小时内的快照 ID。

2、然后,运行以下 SQL 脚本生成 AWR 报告:

@$ORACLE_HOME/rdbms/admin/awrrpt.sql

按照提示,输入报告类型(HTML 或文本)、开始和结束快照 ID。报告将生成在指定的文件中。

3、打开生成的报告文件,分析性能数据,找出可能的性能瓶颈。

分析方式

在阅读 AWR 报告时,需要关注几个重要的部分:

  1. 等待事件(Load Profile):这部分列出了最耗费数据库时间的事件,可以帮助我们找出性能瓶颈。例如,如果 “db file sequential read” 事件的等待时间过长,可能是磁盘 I/O 速度慢或 SQL 查询需要优化。
  2. SQL统计信息(SQL Statistics):这部分提供了 SQL 查询的统计数据,例如执行次数最多的 SQL、消耗最多 CPU 的 SQL 等。你可以找出需要优化的 SQL 查询。
  3. 最大等待时间 (Top Timed Events):这部分列出了消耗最多时间的事件,通常是性能瓶颈的主要来源。例如,如果 “db file sequential read” 事件的等待时间过长,可能是因为磁盘 I/O 速度慢或 SQL 查询需要优化。

例如,假设在报告中看到 “db file sequential read” 事件的等待时间过长,可以根据等待事件的文件 ID 和块 ID,运行以下 SQL 查询找出相关的 SQL 查询:

SELECT SQL_ID, SQL_TEXT
FROM V$SQL
WHERE CURRENT_FILE# = :file_id AND CURRENT_BLOCK# = :block_id;

ASH

使用方式

假设你需要诊断最近 15 分钟内出现的性能瓶颈。你可以查询 ASH 数据来获取这段时间内活动会话的详细信息。

1、运行以下 SQL 查询来查看最近 15 分钟内的活动会话数据:

SELECT SAMPLE_TIME, SESSION_ID, SQL_ID, EVENT, WAIT_TIME, TIME_WAITED
FROM V$ACTIVE_SESSION_HISTORY
WHERE SAMPLE_TIME >= SYSTIMESTAMP - INTERVAL '15' MINUTE;

这将列出最近 15 分钟内的活动会话采样数据。

2、分析查询结果,找出可能的性能瓶颈。例如,可以通过 SQL_ID 来查找执行缓慢的 SQL 查询。

分析方式

在分析 ASH 数据时,也应该关注等待事件和 SQL 查询:

  1. 等待事件:如果某个等待事件的数量过多或等待时间过长,可能是性能瓶颈的来源。
  2. SQL查询:通过 SQL_ID,你可以找出执行缓慢的 SQL 查询,然后进一步分析查询的执行计划,找出需要优化的地方。

例如,假设你在 ASH 数据中发现一个 “enq: TX - row lock contention” 等待事件,这表示有会话在等待行级锁。你可以运行以下 SQL 查询找出相关的会话和 SQL 查询:

SELECT SESSION_ID, SQL_ID
FROM V$ACTIVE_SESSION_HISTORY
WHERE EVENT = 'enq: TX - row lock contention';

然后,你可以进一步分析这些 SQL 查询,查找是否有可以优化的地方,例如减少锁的持有时间。

ADDM

使用方式

假设你需要分析过去一天的数据库性能,并获取优化建议。你可以运行 ADDM 分析来查看诊断结果。

  1. 首先,获取需要的快照 ID。执行以下 SQL 查询:
SELECT SNAP_ID, BEGIN_INTERVAL_TIME, END_INTERVAL_TIME
FROM DBA_HIST_SNAPSHOT
WHERE BEGIN_INTERVAL_TIME >= SYSTIMESTAMP - INTERVAL '1' DAY
ORDER BY SNAP_ID;

这将列出过去一天内的快照 ID。

  1. 然后,运行以下 SQL 脚本执行 ADDM 分析:
@$ORACLE_HOME/rdbms/admin/addmrpt.sql

按照提示,输入开始和结束快照 ID。报告将生成在指定的文件中。

  1. 打开生成的报告文件,查看 ADDM 的诊断结果和优化建议,如增加内存、优化 SQL 查询等。根据建议采取相应的优化措施。

通过这些案例,你可以了解如何使用 AWR、ASH 和 ADDM 工具来诊断 Oracle 数据库的性能问题,并查看相应的报告以采取适当的优化措施。

分析方式

ADDM 报告是最容易理解的,因为它提供了自动诊断的结果和优化建议。你只需要关注两个部分:

  1. 问题:这部分列出了 ADDM 分析的结果,包括诊断的问题和影响的程度。你应该优先处理影响最大的问题。
  2. 建议:这部分提供了针对每个问题的优化建议,例如增加内存、优化 SQL 查询等。你应该根据这些建议来调整数据库的配置或优化 SQL 查询。

例如,假设 ADDM 报告中建议增加 SGA 的大小,你可以按照以下步骤修改数据库的参数:

  1. 登录到 SQL*Plus 作为 SYSDBA。
  2. 运行以下命令查看当前的 SGA 大小:
SHOW PARAMETER sga_target;
  1. 运行以下命令增加 SGA 的大小:
ALTER SYSTEM SET sga_target = new_value SCOPE=BOTH;

以上就是分析 AWR、ASH 和 ADDM 报告的方法和步骤。我希望这些信息对您有所帮助。

总结

总的来说,AWR、ASH 和 ADDM 可以帮助您更好地理解和管理数据库的性能,从而提高应用的响应时间,提升用户的体验,也可以在出现问题时快速定位并解决问题。

05-16 23:18