AWR
AWR:Automatic Workload Repository,通过动态的对系统负载做实时采样生成的统计。
在内存中,AWR Statistics定时每小时收集一次进程的指标。由MMON进程每一个小时生成一个快照,存放在SYSAUX表空间的对应表中。
另外,可以通过V$
相关视图查看到一些AWR实时的指标。AWR还会将V$
相关视图的更新记录到DBA_HIST
相关视图中。所以AWR报告信息基本都来自于DBA_HIST
相关视图。
-- 查看DBA_HIST相关视图
select table_name from dict where table_name like 'DBA_HIST_%';
所以,除了使用AWR报告脚本生成AWR完整报告外,还可以查看相关视图手工统计AWR数据.
例如手工统计部分快照:
select snap_id, name, value
from dba_hist_sga
where snap_id >= 1178 and snap_id <= 1180;
手工写的SQL,就可以将结果集导出来,通过excel等工具做成自己需要的图表。
另外,还可以使用oracle提供的企业管理器网页 Enterprise Manager进行查看相关统计信息的图表。
AWR基线(baseline)
数据库性能数值本身没有是否需要优化的意义。我们可以将用户可以接收的一些性能指标做成一个基线,将数据库当前指标和基线指标做比较,看是否需要优化。
-- 使用一段快照做基线
exec DBMS_WORKLOAD_REPOSITORY.create_baseline(
start_snap_id => 2490,
end_snap_id => 2491,
baseline_name => 'test1_b1',
expiration => 60
);
-- 使用一段时间做基线
exec DBMS_WORKLOAD_REPOSITORY.create_baseline(
start_time => to_date('09-JUL-2020 17:00', 'DD-MON-YYYY HH24:MI'),
end_time => to_date('09-JUL-2020 18:00', 'DD-MON-YYYY HH24:MI'),
baseline_name => 'test2_b1',
expiration => null
);
AWR报告的生成
使用oracle提供的AWR报告脚本生成AWR报告:$ORACLE_HOME/rdbms/admin/awrrpt.sql
该文件夹下其他的awr
开头的脚本也和AWR有关,例如交互式的AWR报告awrrpti.sql
等。
使用sys用户执行该脚本即可:
sqlplus / as sysdba @/app/Administor/prroduct/11.2.0/dbhome/rdbms/admin/awrrpt.sql
ASH
ASH:Active Session History。记录会话的活动信息,比AWR报告内容小一些。
ASH报表间隔时间可以精确到分钟,因而ASH可以提供比AWR更详细的关于历史会话的信息,可以作为AWR的补充。
信息的来源:
v$active_session_history
:当前会话的采样数据(1秒钟一次快照)dba_hist_active_sess_history
:保留v$active_session_history
更早的数据
ASH和AWR对比:
ASH | AWR | |
---|---|---|
Instance wide data | Y | Y |
Time based data | Y | Y |
Counts/occurrence data | N | Y |
Analyze any time period | Y | N |
Detailed session level data | Y | N |
Individual Wait event data | Y | N |
Sampled data | Y | N |
Time based analysis | Y | Y |
ASH 和 sql_trace对比:
ASH | SQLTrace | |
---|---|---|
Parse/Exec/Fetch breakdown | N | Y |
Time based data | Y | Y |
Counts/occurrence data | N | Y |
Detailed session level data | Y | Y |
Individual Wait event data | Y | Y |
Complete trace of operations | N | Y |
Always on | Y | N |
Bind variables available | N | Y |
使用ASH的数据的方式:
- 将ASH数据dump成trace文件
v$active_session_history
实时信息dba_hist_active_sess_history
历史信息- ASH报告
- EM企业管理器的 diagnostic pack
例如,通过SQL查询性能差的SQL:
select sum(a.time_waited) total_time
from v$active_session_history a, v$event_name b
where a.event# = b.event#
and sample_time > '21-NOV-04 12:00:00 AM'
and sample_time < '21-NOV-04 05:00:00 PM'
and b.wait_class = 'User I/O'
使用oracle提供的ASH报告脚本生成ASH报告:$ORACLE_HOME/rdbms/admin/ashrpt.sql