AWR

AWR:Automatic Workload Repository,通过动态的对系统负载做实时采样生成的统计。

在内存中,AWR Statistics定时每小时收集一次进程的指标。由MMON进程每一个小时生成一个快照,存放在SYSAUX表空间的对应表中。

另外,可以通过V$相关视图查看到一些AWR实时的指标。AWR还会将V$相关视图的更新记录到DBA_HIST相关视图中。所以AWR报告信息基本都来自于DBA_HIST相关视图。

  1. -- 查看DBA_HIST相关视图
  2. select table_name from dict where table_name like 'DBA_HIST_%';

所以,除了使用AWR报告脚本生成AWR完整报告外,还可以查看相关视图手工统计AWR数据.

例如手工统计部分快照:

  1. select snap_id, name, value
  2. from dba_hist_sga
  3. where snap_id >= 1178 and snap_id <= 1180;

手工写的SQL,就可以将结果集导出来,通过excel等工具做成自己需要的图表。

另外,还可以使用oracle提供的企业管理器网页 Enterprise Manager进行查看相关统计信息的图表。

AWR基线(baseline)

数据库性能数值本身没有是否需要优化的意义。我们可以将用户可以接收的一些性能指标做成一个基线,将数据库当前指标和基线指标做比较,看是否需要优化。

  1. -- 使用一段快照做基线
  2. exec DBMS_WORKLOAD_REPOSITORY.create_baseline(
  3. start_snap_id => 2490,
  4. end_snap_id => 2491,
  5. baseline_name => 'test1_b1',
  6. expiration => 60
  7. );
  8. -- 使用一段时间做基线
  9. exec DBMS_WORKLOAD_REPOSITORY.create_baseline(
  10. start_time => to_date('09-JUL-2020 17:00', 'DD-MON-YYYY HH24:MI'),
  11. end_time => to_date('09-JUL-2020 18:00', 'DD-MON-YYYY HH24:MI'),
  12. baseline_name => 'test2_b1',
  13. expiration => null
  14. );

AWR报告的生成

使用oracle提供的AWR报告脚本生成AWR报告:$ORACLE_HOME/rdbms/admin/awrrpt.sql

该文件夹下其他的awr开头的脚本也和AWR有关,例如交互式的AWR报告awrrpti.sql等。

使用sys用户执行该脚本即可:

  1. 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:

  1. select sum(a.time_waited) total_time
  2. from v$active_session_history a, v$event_name b
  3. where a.event# = b.event#
  4. and sample_time > '21-NOV-04 12:00:00 AM'
  5. and sample_time < '21-NOV-04 05:00:00 PM'
  6. and b.wait_class = 'User I/O'

使用oracle提供的ASH报告脚本生成ASH报告:$ORACLE_HOME/rdbms/admin/ashrpt.sql