Oracle AWR
Automatic Workload Repository
由MMON进程控制收集信息(内存监控进程)
AWR表存储在SYSAUX表空间SYS模式下
WRM$_* :M表示metadata,存储元数据信息(如检查的数据库和采集的快照)
WRH$_* :H表示history,保存实际采集的统计数据
例如:DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上构建的
开启AWR
默认是启用AWR功能的,由初始化参数STATISTICS_LEVEL控制,
STATISTICS_LEVEL的值为TYPICAL或者 ALL,表示启用AWR
STATISTICS_LEVEL的值为BASIC,表示禁用AWR。
有三个值:
*BASIC:awr统计的计算和衍生值关闭.只收集少量的数据库统计信息.
*TYPICAL:默认值.只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为.
*ALL : 所有可能的统计都被捕捉. 并且有操作系统的一些信息.这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用
--产生整个数据库的AWR报告,运行脚本awrrpt.sql。
@?/rdbms/admin/awrrpt.sql
--产生某个实例的AWR报告,运行脚本awrrpti.sql。
@?/rdbms/admin/awrrpti.sql
--产生某条SQL语句的AWR报告,运行脚本awrsqrpt.sql。
@?/rdbms/admin/awrsqrpt.sql
Oracle Database 10g使用计划的任务GATHER_STATS_JOB来收集AWR统计数据,当在10g中创建数据库的时候,自动创建该任务。
select a.job_name,a.enabled,c.window_name,c.repeat_interval
from dba_scheduler_jobs a,dba_scheduler_wingroup_members b,
dba_scheduler_windows c
where job_name='GATHER_STATS_JOB'
and a.schedule_name=b.window_group_name
and b.window_name=c.window_name;
可以终止和启动这个JOB
exec dbms_scheduler.disable('GATHER_STATS_JOB');
exec dbms_scheduler.enable('GATHER_STATS_JOB');
二. AWR使用
SQL>@?/rdbms/admin/awrrpti.sql
Type Specified: html
输入 num_days 的值: 1
输入 begin_snap 的值: 142
输入 end_snap 的值: 146
输入 report_name 的值: D:/awrrpt_1_142_146.html
三. AWR 操作
3.1. 查看当前的AWR保存策略
col SNAP_INTERVAL format a20
col RETENTION format a20
select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------- -------------------- ----------
262089084 +00000 01:00:00.0 +00007 00:00:00.0 DEFAULT
每小时产生一个SNAPSHOT,保留7天
调整AWR产生snapshot的频率和保留策略
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
关闭AWR,把interval设为0则关闭自动捕捉快照
exec dbms_workload_repository.modify_snapshot_settings(interval=>0);
手工创建一个快照
SQL> exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
查看snap_id及创建时间
SELECT SNAP_ID,
TO_CHAR(BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi:ss') BEGIN_INTERVAL_TIME,
TO_CHAR(STARTUP_TIME,'yyyy-mm-dd hh24:mi:ss') STARTUP_TIME
FROM DBA_HIST_SNAPSHOT ORDER BY 1;
查看快照信息
set line 160 pagesize 49999
col END_INTERVAL_TIME for a20
col BEGIN_INTERVAL_TIME for a20
col FLUSH_ELAPSED for a20
select * from DBA_HIST_SNAPSHOT order by 1;
SQL> select DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION from wrm$_wr_control;
DBID SNAP_INTERVAL SNAPINT_NUM RETENTION
---------- -------------------- ----------- -----------------------------------
4135496890 +00000 01:00:00.0 3600 +00007 00:00:00.0
4138719355 +00000 01:00:00.0 3600 +00007 00:00:00.0
4138663401 +00000 01:00:00.0 3600 +00015 00:00:00.0
看快照
SQL> select * from sys.wrh$_active_session_history
手工删除指定范围的快照
SQL> exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 973, high_snap_id => 999, dbid => 262089084);
创建baseline
在AWR内创建基线是一个好主意,基线定义为一定范围内的快照,它可以用来和其他快照进行比较。
这允许你将当前性能与建立的基准性能进行比较,从而有助于确定数据库性能问题。
SQL> exec dbms_workload_repository.create_baseline(start_snap_id => 1003, end_snap_id => 1013, 'apply_interest_1');
删除baseline
SQL> exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => 'apply_interest_1', cascade => FALSE);
将AWR数据导出并迁移到其它数据库以便于以后分析
SQL> exec DBMS_SWRF_INTERNAL.AWR_EXTRACT(dmpfile => 'awr_data.dmp', mpdir => 'DIR_BDUMP', bid => 1003, eid => 1013);
迁移AWR数据文件到其他数据库
SQL> exec DBMS_SWRF_INTERNAL.AWR_LOAD(SCHNAME => 'AWR_TEST', dmpfile => 'awr_data.dmp', dmpdir => 'DIR_BDUMP');
把AWR数据转移到SYS模式中:
SQL> exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'TEST');
Automatic Workload Repository
由MMON进程控制收集信息(内存监控进程)
AWR表存储在SYSAUX表空间SYS模式下
WRM$_* :M表示metadata,存储元数据信息(如检查的数据库和采集的快照)
WRH$_* :H表示history,保存实际采集的统计数据
例如:DBA_HIST_SYSMETRIC_SUMMARY 是在WRH$_SYSMETRIC_SUMMARY 表上构建的
开启AWR
默认是启用AWR功能的,由初始化参数STATISTICS_LEVEL控制,
STATISTICS_LEVEL的值为TYPICAL或者 ALL,表示启用AWR
STATISTICS_LEVEL的值为BASIC,表示禁用AWR。
有三个值:
*BASIC:awr统计的计算和衍生值关闭.只收集少量的数据库统计信息.
*TYPICAL:默认值.只有部分的统计收集.他们代表需要的典型监控oracle数据库的行为.
*ALL : 所有可能的统计都被捕捉. 并且有操作系统的一些信息.这个级别的捕捉应该在很少的情况下,比如你要更多的sql诊断信息的时候才使用
--产生整个数据库的AWR报告,运行脚本awrrpt.sql。
@?/rdbms/admin/awrrpt.sql
--产生某个实例的AWR报告,运行脚本awrrpti.sql。
@?/rdbms/admin/awrrpti.sql
--产生某条SQL语句的AWR报告,运行脚本awrsqrpt.sql。
@?/rdbms/admin/awrsqrpt.sql
Oracle Database 10g使用计划的任务GATHER_STATS_JOB来收集AWR统计数据,当在10g中创建数据库的时候,自动创建该任务。
select a.job_name,a.enabled,c.window_name,c.repeat_interval
from dba_scheduler_jobs a,dba_scheduler_wingroup_members b,
dba_scheduler_windows c
where job_name='GATHER_STATS_JOB'
and a.schedule_name=b.window_group_name
and b.window_name=c.window_name;
可以终止和启动这个JOB
exec dbms_scheduler.disable('GATHER_STATS_JOB');
exec dbms_scheduler.enable('GATHER_STATS_JOB');
二. AWR使用
SQL>@?/rdbms/admin/awrrpti.sql
Type Specified: html
输入 num_days 的值: 1
输入 begin_snap 的值: 142
输入 end_snap 的值: 146
输入 report_name 的值: D:/awrrpt_1_142_146.html
三. AWR 操作
3.1. 查看当前的AWR保存策略
col SNAP_INTERVAL format a20
col RETENTION format a20
select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- -------------------- -------------------- ----------
262089084 +00000 01:00:00.0 +00007 00:00:00.0 DEFAULT
每小时产生一个SNAPSHOT,保留7天
调整AWR产生snapshot的频率和保留策略
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>30, retention=>5*24*60);
关闭AWR,把interval设为0则关闭自动捕捉快照
exec dbms_workload_repository.modify_snapshot_settings(interval=>0);
手工创建一个快照
SQL> exec DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT();
查看snap_id及创建时间
SELECT SNAP_ID,
TO_CHAR(BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi:ss') BEGIN_INTERVAL_TIME,
TO_CHAR(STARTUP_TIME,'yyyy-mm-dd hh24:mi:ss') STARTUP_TIME
FROM DBA_HIST_SNAPSHOT ORDER BY 1;
查看快照信息
set line 160 pagesize 49999
col END_INTERVAL_TIME for a20
col BEGIN_INTERVAL_TIME for a20
col FLUSH_ELAPSED for a20
select * from DBA_HIST_SNAPSHOT order by 1;
SQL> select DBID, SNAP_INTERVAL, SNAPINT_NUM, RETENTION from wrm$_wr_control;
DBID SNAP_INTERVAL SNAPINT_NUM RETENTION
---------- -------------------- ----------- -----------------------------------
4135496890 +00000 01:00:00.0 3600 +00007 00:00:00.0
4138719355 +00000 01:00:00.0 3600 +00007 00:00:00.0
4138663401 +00000 01:00:00.0 3600 +00015 00:00:00.0
看快照
SQL> select * from sys.wrh$_active_session_history
手工删除指定范围的快照
SQL> exec DBMS_WORKLOAD_REPOSITORY.DROP_SNAPSHOT_RANGE(low_snap_id => 973, high_snap_id => 999, dbid => 262089084);
创建baseline
在AWR内创建基线是一个好主意,基线定义为一定范围内的快照,它可以用来和其他快照进行比较。
这允许你将当前性能与建立的基准性能进行比较,从而有助于确定数据库性能问题。
SQL> exec dbms_workload_repository.create_baseline(start_snap_id => 1003, end_snap_id => 1013, 'apply_interest_1');
删除baseline
SQL> exec DBMS_WORKLOAD_REPOSITORY.DROP_BASELINE(baseline_name => 'apply_interest_1', cascade => FALSE);
将AWR数据导出并迁移到其它数据库以便于以后分析
SQL> exec DBMS_SWRF_INTERNAL.AWR_EXTRACT(dmpfile => 'awr_data.dmp', mpdir => 'DIR_BDUMP', bid => 1003, eid => 1013);
迁移AWR数据文件到其他数据库
SQL> exec DBMS_SWRF_INTERNAL.AWR_LOAD(SCHNAME => 'AWR_TEST', dmpfile => 'awr_data.dmp', dmpdir => 'DIR_BDUMP');
把AWR数据转移到SYS模式中:
SQL> exec DBMS_SWRF_INTERNAL.MOVE_TO_AWR (SCHNAME => 'TEST');