罗海雄:仅仅使用AWR做报告? 性能优化还未入门(含PPT)

AWR相信DBA们都不陌生。Automatic Workload Repository,自动负载信息库,就是Oracle把数据库中比较重要的性能视图里的信息,定期从内存保存到数据库里面。默认情况下,Oracle 会每个一个小时保存一次。另外,Oracle也有机制保证信息库的大小不至于无限增长,所以一般信息库只保留7天的数据。默认是保存在SYSAUX表空间中。主要的信息涵盖了Oracle较重要的性能相关信息。

42fdea95c50d7627fcc55e1cc1006664cb3a3f90

底层存储为WRH$* 表, 通常可通过DBA_HIST_*访问,总共有100多张表。

对于AWR, 常规的用法是生成AWR或者ASH报告。

下面列举了几个最常见的方法。

@?/rdbms/admin/awrrpt.sql -- 标准报告,特定时间段内总体性能报告

@?/rdbms/admin/awrddrpt.sql -- 对比报告,两个时间段内性能对比

@?/rdbms/admin/ashrpt.sql -- ASH报告,特定时间段内历史会话性能报告

@?/rdbms/admin/awrsqrpt.sql -- SQL报告,特定时间段内SQL性能报告

AWR/ASH报告很不错,但也有一些缺陷。

首先,AWR反应的是点对点的数据。比如说,我生成一个今天9:00到12:00的AWR报告,那么,我看到的,就是12:00和9:00两个时间点的变化。但是,9:00-10:00, 10:00-11:00,11:-12:00 分别是什么样的,我们看不到。

另外一个问题,AWR把数据都罗列出来,但却缺乏数据间的联系.

AWR混入大量无用数据, 导致生成AWR报告需要30秒到几分钟的时间,所以,如果我们有裸数据,其实可以更高效,更深入的挖掘Oracle数据库的性能信息。

在裸数据里面,记录的各种指标主要有4类

最多的一种是"累计值"

举个例子 dba_hist_sysstat 里会记录数据库的逻辑读。记录的不是这一个小时产生的逻辑读,而是从数据库启动到产生快照的时候的总的逻辑读。这就叫累计值,大多数的指标的是累计值。

也有部分数据记录的是"当前值"

比如说,数据库当前的PGA使用量,数据库的会话数等,还有比较特殊的,会记录两次快照之间的变化值。我们可以认为,这是一种预计算,最常见的记录变化值的两类数据,分别是SQL相关统计信息,以及段(segment)相关统计信息,当然,SQL/Segment记录变化值的同时,也记录了累计值。

猜你喜欢

转载自my.oschina.net/u/3611008/blog/1818067
今日推荐