🏆 文章目标:本篇介绍Oracle性能优化相关的工具,如AWR、ASH和ADDM。
🍀 Oracle 性能优化之AWR、ASH和ADDM
✅ 创作者:Jay…
🎉 个人主页:Jay的个人主页
🍁 展望:若本篇讲解内容帮助到您,请帮忙点个赞吧,再点点您的小手关注下,您的支持是我继续写作的最大动力,谢谢🙏 作为回馈,对我博客内容感兴趣的小伙伴可以私聊我,我们一起学习 Oracle 和 PostgreSQL的知识,大家一起共同进步。
介绍
AWR、ASH 和 ADDM 是 Oracle 数据库性能诊断和优化的重要工具,它们可以帮助您达到以下目标:
- 性能监控:这些工具提供了关于数据库性能的详细信息,例如等待事件、SQL 查询的执行统计、系统和会话的活动等。你可以使用这些信息来监控数据库的性能,例如检查是否有性能瓶颈,或者追踪性能的变化趋势。
- 性能诊断:如果数据库的性能出现问题,例如响应时间变慢或 CPU 利用率过高,你可以使用这些工具来诊断问题的原因。例如,你可以查看等待事件和 SQL 查询的统计信息,找出消耗资源最多的操作。
- 性能优化:这些工具不仅提供了诊断性能问题的信息,还提供了优化建议。例如,ADDM 可以自动分析 AWR 数据,识别出性能问题,并提供优化建议。你可以根据这些建议来优化数据库的配置或 SQL 查询。
- 问题排查:在出现问题时,例如数据库挂起、事务失败等,可以使用这些工具来排查问题的原因。例如,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 报告时,需要关注几个重要的部分:
- 等待事件(Load Profile):这部分列出了最耗费数据库时间的事件,可以帮助我们找出性能瓶颈。例如,如果 “db file sequential read” 事件的等待时间过长,可能是磁盘 I/O 速度慢或 SQL 查询需要优化。
- SQL统计信息(SQL Statistics):这部分提供了 SQL 查询的统计数据,例如执行次数最多的 SQL、消耗最多 CPU 的 SQL 等。你可以找出需要优化的 SQL 查询。
- 最大等待时间 (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 查询:
- 等待事件:如果某个等待事件的数量过多或等待时间过长,可能是性能瓶颈的来源。
- 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 分析来查看诊断结果。
- 首先,获取需要的快照 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。
- 然后,运行以下 SQL 脚本执行 ADDM 分析:
@$ORACLE_HOME/rdbms/admin/addmrpt.sql
按照提示,输入开始和结束快照 ID。报告将生成在指定的文件中。
- 打开生成的报告文件,查看 ADDM 的诊断结果和优化建议,如增加内存、优化 SQL 查询等。根据建议采取相应的优化措施。
通过这些案例,你可以了解如何使用 AWR、ASH 和 ADDM 工具来诊断 Oracle 数据库的性能问题,并查看相应的报告以采取适当的优化措施。
分析方式
ADDM 报告是最容易理解的,因为它提供了自动诊断的结果和优化建议。你只需要关注两个部分:
- 问题:这部分列出了 ADDM 分析的结果,包括诊断的问题和影响的程度。你应该优先处理影响最大的问题。
- 建议:这部分提供了针对每个问题的优化建议,例如增加内存、优化 SQL 查询等。你应该根据这些建议来调整数据库的配置或优化 SQL 查询。
例如,假设 ADDM 报告中建议增加 SGA 的大小,你可以按照以下步骤修改数据库的参数:
- 登录到 SQL*Plus 作为 SYSDBA。
- 运行以下命令查看当前的 SGA 大小:
SHOW PARAMETER sga_target;
- 运行以下命令增加 SGA 的大小:
ALTER SYSTEM SET sga_target = new_value SCOPE=BOTH;
以上就是分析 AWR、ASH 和 ADDM 报告的方法和步骤。我希望这些信息对您有所帮助。
总结
总的来说,AWR、ASH 和 ADDM 可以帮助您更好地理解和管理数据库的性能,从而提高应用的响应时间,提升用户的体验,也可以在出现问题时快速定位并解决问题。
关注公众号:熊猫Jay字节之旅,了解更多 AI 技巧 ~