oracle性能优化学习系列(五)
awr概述
1,如配置statistics_level=typical or all,自动启用awr
2,如配置为basic,使用dbms_workload_repository手工收集;但可能收集的统计信息不全;
3,awr收集统计信息包含:
1,segment的相关统计
2,基于各项活动使用情况的时间维度统计;显示在v$sys_time_model and v$sess_time_model
3,v$sysstat and v$sesstat;
4,sql语句
5,ash统计;活动会话的历史统计信息
4,snapshots快照
1,在采样间隔收集的一系列历史数据;
2,awr每1小时收集snapshot,并在awr中保持8天;
3,手工也可以收集snapshot,但一般没必要;
4,addm会分析比对snapshot以判断性能是否最佳
5,baselines基线
1,用于和相同时间范围比较的特定时间范围的性能数据;
2,基线包含于快照内;
3,快照可从自动化的awr清理进程排除在外;--dbms_workload_repository.drop_baseline自快照删除某个基线
4,或者永久保存
5,数据库的几种基线类型:
1,fixed baselines 固定性的基线
2,moving window baseline 迁移窗口基线
3,baseline templates 基线模板
1,fixed baselines 固定性的基线
即固定的,连续性的过去一个时间范围;指定基线前,一定要仔细分析;此时间范围是否
为系统最佳性能时间;
2,moving window baseline 变动的窗口基线
1,它对应于awr保存期限所有的awr数据;
2,这个特性重要,适用于数据库使用整个awr保持期的数据比较度量指标的门限值;所以要使用自适应或自调整的门限;
3,oracle自动默认维护一个系统定义的moving window baseline;
4,其默认的窗口大小即当前awr的保持时间,8天;
5,因为moving window baseline依赖于awr retention time,故先要变更它的值;
3,baseline templates 基线模板
1,有2个类型:单一和重复
2,单一:适用于你预先想采集将来某个时间范围的awr,创建单一的基线模板;
3,重复:适用于重复运行(时间间隔)的采集任务;比如每周六:
新采集会覆盖旧的采集数据
6,Adaptive Thresholds自调整或自适应门限
1,检测或监控性能问题
2,根据基线计算出统计信息自动化配置警告和严重警告门限;
3,每周重计算一次门限
4,基于不同的工作模式(对于OLTP和批处理)采用不同的门限值
5,自适应门限的2种类型:
1,最大比例法:基于moving window baseline的最大统计值,计算其比例;
2,重要性级别法:基于moving window baseline配置的百分比;代表观察法处理不合理的程度
百分比程度:
1,high(.95)--仅5%超过此值
2,very high(.99)--仅1%超过此值
3,severe(.999)仅1/1000超过此值
4,extreme(.9999)仅1/100000超过此值
3,如指定severe or extreme,oracle通过内部计算配置门限值;在一些情况下,oracle
不会基于对应的级别创建门限值。
4,最大比例法适用于根据高峰时刻负荷的定义大小的系统;
当天工作负荷接近或超过之前高峰负荷的门限时,想接到警报;
比如:每秒产生的日志可采用这种方法;
5,重要性级别法适用于系统正常运作其特性很稳定,而在性能变差时各个特征变动很大;
比如:每秒事务响应时间;在正常情况下很不错,但一旦性能变差,其指标值变化很大;
awr空间占用
1,几个影响的因素
采样的间隔
活动会话数量
历史数据保存期限
2,如果减少awr空间占用,会影响如下组件的发挥功能
1,addm:automatic database diagnostic monitor
2,sql tuning advisor
3,,undo advisor
4,segment advisor
管理awr
1,管理快照
2,管理基线
3,管理基线模板
4,传输awr数据
5,如何使用awr视图
6,产生awr报告
7,产生awr比较报告
8,产生ash报告
9,使用ash报告
1,管理快照
包括:创建快照
删除快照
修改快照
示例:
--startup_time即数据库启动时间,采样间隔为1小时,snap_level为快照的级别
SQL> select snap_id,dbid,to_char(startup_time,'yyyymmdd hh24:mi:ss') as startup_time,to_char(BEGIN_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as BEGIN_INTERVAL_TIME,to_char(END_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as END_INTERVAL_TIME,snap_level from dba_hist_snapshot order by BEGIN_INTERVAL_TIME desc;
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_LEVEL
---------- ---------- ----------------- ------------------- ----------------- ----------
657 1331266241 20130311 09:56:52 20130311 15:00:07 20130311 16:00:20 1
656 1331266241 20130311 09:56:52 20130311 14:00:54 20130311 15:00:07 1
655 1331266241 20130311 09:56:52 20130311 13:00:40 20130311 14:00:54 1
654 1331266241 20130311 09:56:52 20130311 12:00:26 20130311 13:00:40 1
653 1331266241 20130311 09:56:52 20130311 11:00:12 20130311 12:00:26 1
652 1331266241 20130311 09:56:52 20130311 10:08:01 20130311 11:00:12 1
651 1331266241 20130311 09:56:52 20130311 09:56:52 20130311 10:08:01 1
650 1331266241 20130310 17:53:20 20130310 21:00:59 20130310 22:00:10 1
649 1331266241 20130310 17:53:20 20130310 20:00:48 20130310 21:00:59 1
648 1331266241 20130310 17:53:20 20130310 19:00:37 20130310 20:00:48 1
647 1331266241 20130310 17:53:20 20130310 18:04:27 20130310 19:00:37 1
646 1331266241 20130310 17:53:20 20130310 17:53:20 20130310 18:04:27 1
645 1331266241 20130310 12:13:35 20130310 16:00:52 20130310 17:00:05 1
644 1331266241 20130310 12:13:35 20130310 15:00:36 20130310 16:00:52 1
643 1331266241 20130310 12:13:35 20130310 14:00:22 20130310 15:00:36 1
642 1331266241 20130310 12:13:35 20130310 13:00:09 20130310 14:00:22 1
641 1331266241 20130310 12:13:35 20130310 12:25:01 20130310 13:00:09 1
640 1331266241 20130310 12:13:35 20130310 12:13:35 20130310 12:25:01 1
639 1331266241 20130309 23:37:09 20130310 00:00:17 20130310 01:00:28 1
638 1331266241 20130309 23:37:09 20130309 23:37:09 20130310 00:00:17 1
--创建快照,
SQL> exec dbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed
SQL>eselect snap_id,dbid,to_char(startup_time,'yyyymmdd hh24:mi:ss') as startup_time,to_char(BEGIN_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as BEGIN_INTERVAL_TIME,to_char(END_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as END_INTERVAL_TIME,snap_level from dba_hist_snapshot order by BEGIN_INTERVAL_TIME desc;
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_LEVEL
---------- ---------- ----------------- ------------------- ----------------- ----------
658 1331266241 20130311 09:56:52 20130311 16:00:20 20130311 16:04:03 1 --注意本行的end_interval_time,此时间间隔不足1 小时,即为手工创建
657 1331266241 20130311 09:56:52 20130311 15:00:07 20130311 16:00:20 1
--手工运行又产生一条快照
SQL> exec dbms_workload_repository.create_snapshot();
PL/SQL procedure successfully completed
SQL> select snap_id,dbid,to_char(startup_time,'yyyymmdd hh24:mi:ss') as startup_time,to_char(BEGIN_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as BEGIN_INTERVAL_TIME,to_char(END_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as END_INTERVAL_TIME,snap_level from dba_hist_snapshot order by BEGIN_INTERVAL_TIME desc;
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_LEVEL
---------- ---------- ----------------- ------------------- ----------------- ----------
659 1331266241 20130311 09:56:52 20130311 16:04:03 20130311 16:06:44 1
658 1331266241 20130311 09:56:52 20130311 16:00:20 20130311 16:04:03 1
--删除快照
SQL> select snap_id,dbid,to_char(startup_time,'yyyymmdd hh24:mi:ss') as startup_time,to_char(BEGIN_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as BEGIN_INTERVAL_TIME,to_char(END_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as END_INTERVAL_TIME,snap_level from dba_hist_snapshot where snap_id in (657,658,659) order by BEGIN_INTERVAL_TIME
2 ;
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_LEVEL
---------- ---------- ----------------- ------------------- ----------------- ----------
657 1331266241 20130311 09:56:52 20130311 15:00:07 20130311 16:00:20 1
658 1331266241 20130311 09:56:52 20130311 16:00:20 20130311 16:04:03 1
659 1331266241 20130311 09:56:52 20130311 16:04:03 20130311 16:06:44 1
SQL> exec dbms_workload_repository.drop_snapshot_range(low_snap_id => 657,high_snap_id => 659,dbid => 1331266241);
PL/SQL procedure successfully completed
SQL> select snap_id,dbid,to_char(startup_time,'yyyymmdd hh24:mi:ss') as startup_time,to_char(BEGIN_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as BEGIN_INTERVAL_TIME,to_char(END_INTERVAL_TIME,'yyyymmdd hh24:mi:ss') as END_INTERVAL_TIME,snap_level from dba_hist_snapshot where snap_id in (657,658,659) order by BEGIN_INTERVAL_TIME
2 ;
SNAP_ID DBID STARTUP_TIME BEGIN_INTERVAL_TIME END_INTERVAL_TIME SNAP_LEVEL
---------- ---------- ----------------- ------------------- ----------------- ----------
--修改快照
--awr配置信息
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ----------
1331266241 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT
--1,调节interval,retention,top sql参数值
2,仅影响诊断工具的使用
3,topsql指定针对每个sql标准(如:花费时间,cpu time,解析次数,占用共享池等)永久存储的最排列sql的数量
4,配置这些参数仅影响awr sql收集的行为,不会改变统计刷新级别即statistics_level和flush_level
SQL> exec dbms_workload_repository.modify_snapshot_settings(topnsql => 100);
PL/SQL procedure successfully completed
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- ----------
1331266241 +00000 01:00:00.0 +00008 00:00:00.0 100
SQL> exec dbms_workload_repository.modify_snapshot_settings(topnsql => 'MAXIMUM');
PL/SQL procedure successfully completed
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9240380/viewspace-755752/ ,如需转载,请注明出处,否则将追究法律责任。