本篇介紹如何在 Oracle 資料庫上生成 AWR 報告, 並將其以HTML格式保存在磁盤中.
AWR全称Automatic Workload Repository, 自动负载信息库, 是Oracle 10g版本后推出的一种性能收集和分析工具, 提供了一个时间段内整个系统的报表数据. 通过AWR报告, 可以分析指定的时间段内数据库系统的性能.
AWR的由来:
10g之前的oracle:用户的连接将产生会话, 当前会话记录保存在v$session中; 处于等待状态的会话会被复制一份放在v$session_wait中. 当该连接断开后, 其原来的连接信息在v$session和v$session_wait中就会被删除; oracle10g及之后保留下了v$session_wait中的这些信息, 并多了v$active_session_history(ASH)视图, 记录每个活动session在v$session_wait中最近10次的等待事件.
ASH的采样数据是保存在内存中. 而分配给ASH的内存空间是有限的, 当所分配空间占满后, 旧的记录就会被覆盖掉; 而且数据库重启后, 所有的这些ASH信息都会消失. 这样, 对于长期检测oracle的性能是不可能的. 在Oracle10g中, 提供了永久保留ASH信息的方法, 这就是AWR.
由于全部保存ASH中的信息是非常耗费时间和空间的, AWR采用的策略是:每小时对v$active_session_history进行采样一次, 并将信息保存到磁盘中, 并且保留7天, 7天后旧的记录才会被覆盖. 这些采样信息被保存在视图wrh$_active_session_history中. 而这个采样频率(1小时)和保留时间(7天)是可以根据实际情况进行调整的, 这就给DBA们提供了更加有效的系统监测工具.
生成AWR報告:
首先我們需要確認需要生成AWR報告的實例SID
# 查看當前系統上運行的oracle資料庫實例
Command #ps -ef | grep smon
例如我們需要為實例 vmsfis 生成AWR報告
# 連接目標實例
Command #export ORACLE_SID=vmsfis
Command #sqlplus / as sysdba
登入成功后我們還需要確認我們登入了正確的資料庫實例
# 查詢當前實例的名稱和狀態
SQL >select name,open_mode from v$database;
確認無誤後執行下面的命令開始生成AWR報告
# 生成AWR報告
SQL >@?/rdbms/admin/awrrpt
您想要 HTML 报告还是纯文本报告? 为 HTML 报告输入'html', 或为纯文本输入'text' 默认为'html'
在這裏需要選擇AWR報告生成的格式, 這裏我們輸入html來使用html格式生成
value >html
輸入完成後按下回車進行下一步設定
输入天数 (n) 将导致列出最近 (n) 天的快照。 在不指定数字的情况下按 <return> 会列出所有已完成的快照。
在這裏例如我們要為昨天下午3點到今天下午3點生成AWR報告, 我們就需要輸入2來列出昨天和今天兩天的快照 ID
value >2
輸入完成後按下回車進行下一步設定
指定开始和结束快照 ID, 首先指定開始的快照 ID
我們需要創建的AWR範圍從昨天下午3點到今天下午3點, 今天是2023/4/18, 那麽開始的快照 ID我們就找”17 Apr 2023 15:00”
value >38882
接著指定結束的快照 ID, 結束的快照 ID就是”18 Apr 2023 15:00”前面的
value >38906
輸入完成後按下回車進行下一步設定
默认报告文件名为 awrrpt_1_38882_38906.html. 要使用此名称, 请按 <return> 继续, 否则输入替代名称.
這裏我們可以自定AWR報告的名稱, 例如
value >awr_vmsfis_20230418.html
輸入完成後按下回車進行下一步設定
等待AWR報告生成完成, 你將在/home/oracle路徑下看到你的AWR報告文件
至此, 你已經完成了一次AWR報告的生成, 參考以上步驟你也可以為你自己的資料庫實例生成AWR報告.
參考文章:
查拉图斯特拉面条: Oracle生成awr报告操作步骤介绍
https://www.cnblogs.com/silgen/p/16573602.html
遠離塵世の方舟: 自动工作负载库(Automatic Workload Repository,AWR)
https://www.cnblogs.com/rusking/p/4362346.html