ITPub博客

首页 > 数据库 > Oracle > AWR_基础——20170104

AWR_基础——20170104

Oracle 作者:lshj85 时间:2017-01-04 22:15:37 0 删除 编辑


Automatic Workload Repository 是 10g 引入的一个重要组件。在里面存贮着近期一段时间内,默认是 7 天( 11G 8 天),数据库活动状态的详细信息。 快照由一个称为 MMON 的新的后台进程及其从进程自动采集数据。AWR 报告是对 AWR 视图进行查询而得到的一份自动生成的报告。通过 AWR 和 AWR 报告, DBA 可以容易地获知最近数据库的活动状态,数据库的各种性能指标的变化趋势曲线,最近数据库可能存在的异常,分析数据库可能存在的性能瓶颈从而对数据库进行优化。
    AWR 报告所有的数据来源于 AWR 视图,即以 DBA_HIST_开头的所有系统表,Database
Reference 有对所有这些系统表的描述。AWR 的前身是 Statspack, Statspack 在 10g 和 11g 中也有提供,同时和 AWR 一起做了同步更新,而且 Statspack 是公开源代码。
    10g 中 一个 新 视图 v$session_wait_history 这个 视 图保 存 了每 个 活动 session 在
v$session_wait 中最近 10 次的等待事件。但这对于一段时期内的数据性能状况的监测是远远不够的,为了解决这个问题,在 10g 中还新添加了一个视图: v$active_session_history,这就是 ASH, ASH 缺省每一秒收集一下 v$session 中活动会话的情况,记录会话等待的事件,不活动的会话不会被采样 ,间隔时间由 _ash_sampling_interval 参数确定 ,由于记录 session 的活动信息是很费时间和空间的, ASH 用的策略是:保存处于等待状态的活动 session 的信息,每秒从 v$session_wait 中采样一次,并将采样信息保存在内存中(ASH 的采样数据是保存在内存中)。
    ASH的采样数据是保存在内存中,而分配给ASH的内存空间是有限的,当所分配空间占满
后,旧的记录就会被覆盖掉;而且数据库重启后,所有的这些ASH信息都会消失。这样,
对于长期检测oracle的性能是不可能的,在Oracle10g中,提供了永久保留ASH信息的方
法,这就是AWR。例如与V$ACTIVE_SESSION_HISTORY对应的AWR表:
DBA_HIST_ACTIVE_SESS_HISTORY,默认情况下DBA_HIST_ACTIVE_SESS_HISTORY
字典的数据每10 秒收集一次,而V$ACTIVE_SESSION_HISTORY 中则是每秒一次。

AWR 数据主要由两部分组成:
1、 保存在内存中的系统负载和性能统计数据,主要通过 V$视图访问。
2、 MMON 进程定期自动以快照( snapshot) 将保存在内存中的 AWR 数据,转存到磁
盘。这些数据主要通过 DBA_*视图访问。


   由于全部保存 ASH 中的信息是非常耗费时间和空间的,所以 AWR 采用的策略是:
   MMON 进程每小时对 ASH 进行采样一次,并将信息保存到磁盘中,如内存不足, ASH
BUFFER 满的话 MMNL 进程就会主动写出,并保留 7 天, 7 天后旧的记录才会被覆盖。这
些采样信息被保存在表 wrh$_active_session_history 中。


SELECT pool, name, bytes / 1024 / 1024
FROM v$sgastat
WHERE name LIKE '%ASH %';
POOL NAME BYTES/1024/1024
shared pool ASH buffers 15.5

其实, AWR 记录的信息不仅是 ASH,还可以收集到数据库运行的各方面统计信息和
等待信息,用以诊断分析。 AWR 的采样方式是,以固定的时间间隔为其所有重要的统计信
息和负载信息执行一次采样,并将采样信息保存在 AWR 中。可以这样说: ASH 中的信息被
保存到了 AWR 中的视图 wrh$_active_session_history 中。 ASH 是 AWR 的真子集。
AWR 用几个表来存储采集的性能统计数据,所有的表都存储在 SYSAUX 表空间中
的 SYS 模式下,并且以 WRM$_*(5 个) 和 WRH$_*( 94 个)的格式名。 WRM$_*这种类型存储元数据信息(如检查的数据库和采集的快照), WRH$_*这种类型保存实际采集的统计数据。 H 代表“历史数据 (historical)”,而 M 代表“元数据 (metadata)”。在这些表上构建了几种带前缀 DBA_HIST_ 的视图( dba_hist_snapshot,dba_hist_baseline 等),这些视图可以用来编写您自己的性能诊断工具。查询所有在 DBA_HIST 开头的数据字典:

SELECT *
FROM dict
WHERE table_name LIKE 'DBA_HIST%';


配置AWR
   修改快照收集间隔和保存时间默认情况下, AWR 每隔 1 小时自动收集一个系统负载快照,并且此快照默认保存 7 天( 11G 8 天)。

查看当前的缺省设置,可以使用下面的语句:

SELECT snap_interval, retention FROM dba_hist_wr_control;

修改快照的收集间隔为 2 小时,保存时间为 14 天:

execute dbms_workload_repository.modify_snapshot_settings

(interval => 120,retention => 14*24*60);

手工快照采集

exec dbms_workload_repository.create_snapshot;

RAC 只需在一个节点采集快照, Oracle 将自动在所有节点产生时间几乎一致, snap ID
号相同的快照。

关闭 AWR:

把 interval 设为 0 则关闭自动捕捉快照:

exec

dbms_workload_repository.modify_snapshot_settings(interval=>0);


收集 AWR 报告的级别

AWR 的行为受到初始化参数 STATISTICS_LEVEL 的影响。这个参数有三个值:
l BASIC: awr 统计的计算和衍生值关闭.只收集少量的数据库统计信息。
l TYPICAL:(默认值)只有部分的统计收集.他们代表需要的典型监控 oracle 数
据库的行为。
l ALL : 所有可能的统计都被捕捉. 并且有操作系统的一些信息.这个级别的捕捉
应该在很少的情况下,比如你要更多的 sql 诊断信息的时候才使用。
show parameter statistics_level
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
statistics_level string TYPICAL


创建 baseline

基线( baseline)是一种机制,可以在重要时间的快照信息集做标记。一个基线定义在一
对快照之间,快照通过他们的快照序列号识别.每个基线有且只有一对快照。一次典型的性能
调整实践从采集量度的基线集合、作出改动、然后采集另一个基线集合开始,可以比较这两
个集合来检查所作的改动的效果。在 AWR 中,对现有的已采集的快照可以执行相同类型
的比较。

Baseline 记录了 baseline 所指定的快照 ID,当维护 awr 的 mmon 进程在清除过期的快照
时,在 baseline 中的快照则不会被删除,当数据库做了一段时间的调优后,awr 可以用 baseline
保留的快照与当前系统的 awr 报告进行对比.

基线查询:
SELECT * FROM dba_hist_baseline;
SELECT * FROM wrm$_baseline;

基线创建:
execute dbms_workload_repository.create_baseline
(start_snap_id =>1,
end_snap_id =>100,
baseline_name =>'xxx',
dbid => xxx);

基线删除:

exec dbms_workload_repository.drop_baseline

(baseline_name=>'xxx', cascade=>true);


导出和迁移 AWR 数据

可以将 AWR 数据导出并迁移到其它数据库以便于以后分析。
DBMS_SWRF_INTERNAL.AWR_EXTRACT 用来导出数据:
BEGIN
DBMS_SWRF_INTERNAL.AWR_EXTRACT (dmpfile => 'awr_data.dmp',
dmpdir => 'TMP_DIR',
bid => 302,
eid => 305);
END;

其中, dmpfile 参数用于指定将要导出的 AWR 数据文件的名字, dmpdir 是指定存放导
出文件的目录路径, bid 是起始快照编号, eid 是结束快照编号。
也可以使用如下脚本:
SQL>@?/rdbms/admin/awrextr.sql
DBMS_SWRF_INTERNAL 用来迁移 AWR 数据文件到其他数据库。导入 AWR 数据的
过程分为两个步骤,首先使用 DBMS_SWRF_INTERNAL.AWR_LOAD 方法把数据导入到一
个临时模式中,本例是 AWR_TEST(也可以自己定义名称),具体方法如下:
BEGIN
DBMS_SWRF_INTERNAL.AWR_LOAD (SCHNAME => 'AWR_TEST',
dmpfile => 'awr_data',
dmpdir => 'TMP_DIR');
END;
也可以使用如下脚本:
SQL>@?/rdbms/admin/awrload.sql
下面把需要把 AWR 数据转移到 SYS 模式中,具体操作方法如下:
exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'TEST');
至此 AWR 数据的导入工作已经完成,现在就可以使用这种方法建立一个专门存放
AWR 数据的数据库,用于集中管理和分析多个数据库实例的性能统计数据。

设置 SQL 保存阙值

     Oracle 设定的阙值并非捕获所有的 sql 语句,所以无法看到某些 sql 历史执行计划乃
正常现象。在 Oracle 9i 的时候,我们可以通过设定不同的快照 level 获得不同程度的详细信
息。也可以单独配置收集 sql 的阙值,如指定 sql 的执行次数,磁盘读的次数,解析调用的
数量等。所有超出这个设置的 sql 语句都收集到 snapshot 之中。 Oracle 10g, 11g 也有相应的
设置。

查询 awr 配置:
SELECT * FROM dba_hist_wr_control;
设置保存所有的 SQL:
EXEC dbms_workload_repository.modify_snapshot_settings(topnsql=>'MAXIMUM');
设置缺省值:
EXEC dbms_workload_repository.modify_snapshot_settings(topnsql=>'DEFAULT');
MODIFY_SNAPSHOT_SETTINGS 定义:
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
(
retention IN NUMBER DEFAULT NULL,
interval IN NUMBER DEFAULT NULL,
topnsql IN NUMBER DEFAULT NULL,
dbid IN NUMBER DEFAULT NULL);
DBMS_WORKLOAD_REPOSITORY.MODIFY_SNAPSHOT_SETTINGS
(
retention IN NUMBER DEFAULT NULL,
interval IN NUMBER DEFAULT NULL,
topnsql IN VARCHAR2,
dbid IN NUMBER DEFAULT NULL);
topnsql 定义
If NUMBER: Top N SQL size. The number of Top SQL to flush for each SQL criteria
(Elapsed Time, CPU Time, Parse Calls, Shareable Memory, Version Count). The value for this
setting will not be affected by the statistics/flush level and will override the system default behavior
for the AWR SQL collection. The setting will have a minimum value of 30 and a maximum value
of 50,000. Specifying NULL will keep the current setting.
If VARCHAR2: Users are allowed to specify the following values: (DEFAULT, MAXIMUM,
N), where N is the number of Top SQL to flush for each SQL criteria. Specifying DEFAULT will
revert the system back to the default behavior of Top 30 for statistics level TYPICAL and Top 100
for statistics level ALL. Specifying MAXIMUM will cause the system to capture the complete set
of SQL in the cursor cache. Specifying the number N is equivalent to setting the Top N SQL with
the NUMBER type. Specifying NULL for this argument will keep the current setting.
l 所有当前执行的 sql 的执行计划位于 v$sql_plan 视图,按照 LRU 算法淘汰
l 符合 sql 捕获条件的 sql 执行计划在 awr 快照生成之后会被填充到
l 导致 sql 执行计划无法从 dba_hist_sql_plan 获得应考虑修改 awr 快照配置
topnsql 参数
l awr 快照同时受到 statistics_level 参数的影响。如果其值为 all 时,收集 100
条 top sql,为 typical 时收集 30 条


使用 AWR
AWR产生快照点(时间点)的方法:手动
或自动方式
1. AWR 手动产生快照
exec dbms_workload_repository.create_snapshot;
如果数据库的某些参数或应用程序做了调整,可以手工即时的创建一个快照更有利于
数据的统计分析。
2. AWR 自动产生快照
根据所设定的快照频率( SNAP_INTERVAL)自动产生快照
3.查看快照:
SELECT * FROM sys.wrh$_active_session_history;
4.手工删除指定范围的快照
exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE
(low_snap_id => 2889,
high_snap_id => 3000,
dbid => 2774909533);

AWR产生报表的方法:使用 SQL命令
l awrrpt.sql :生成指定快照区间的统计报表;
l awrrpti.sql :生成指定数据库实例,并且指定快照区间的统计报表;
l awrsqlrpt.sql :生成指定快照区间,指定 SQL 语句(实际指定的是该语句的 SQLID)的统
计报表;
l awrsqrpi.sql :生成指定数据库实例,指定快照区间的指定 SQL 语句的统计报表;
l awrddrpt.sql :指定两个不同的时间周期,生成这两个周期的统计对比报表;
l awrddrpi.sql :指定数据库实例,并指定两个的不同时间周期,生成这两个周期的统计

对比报表;



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31419724/viewspace-2131920/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-12-13

  • 博文量
    7
  • 访问量
    6194