【ORACLE】awr报告问题分析
本文转自:http://www.linuxidc.com/Linux/2015-10/123959.htm
感谢分享
1、问题说明
运维人员都有“节日休假恐怖症”,越到节日、休假和外出出差,系统越可能出现问题。笔者在进行一个系统的例行检查时,出现了问题。
数据库版本为11gR2,具体版本编号为11.2.0.3。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 – Production
问题发现的由头是生成AWR报告的时候,发现近几天都没有正常生成AWR Snapshot。由于是很少用的系统,所以笔者只在每月进行一次跟踪。这种情况肯定不正常,进入10g之后,AWR后台默认每隔一小时,都会自动生成一个Snapshot镜像数据。
这种情况,笔者本能想去定位alert log,大部分异常情况,Oracle都会记录在数据库中。果然在其中发现了问题。
Wed Sep 30 14:24:15 2015
ORA-1653: unable to extend table SYS.SCHEDULER$_EVENT_LOG by 128 in tablespace SYSAUX
Errors in file /home/oracle/app/diag/rdbms/xxx/xxxdb/trace/xxxdb_j000_3385.trc:
ORA-01653: unable to extend table . by in tablespace
ORA-01653: unable to extend table SYS.SCHEDULER$_EVENT_LOG by 128 in tablespace SYSAUX
Wed Sep 30 15:06:58 2015
ORA-1653: unable to extend table SYS.SCHEDULER$_EVENT_LOG by 128 in tablespace SYSAUX
Errors in file /home/oracle/app/diag/rdbms/xxxdb/xxxdb/trace/xxxdb_j000_5102.trc:
ORA-01653: unable to extend table . by in tablespace
ORA-01653: unable to extend table SYS.SCHEDULER$_EVENT_LOG by 128 in tablespace SYSAUX
从内容上看,是sysaux表空间满了。默认情况下,Oracle的系统性质表空间都是不支持文件自动拓展的。如果原有大小写满了,同时不支持自动拓展,的确会有报错异常。
此时,AWR配置内容是默认方式。
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- --------------------------------------- --------------------------------------- ----------
1778314713 +00000 01:00:00.0 +00008 00:00:00.0 DEFAULT
默认AWR是每小时保存一个镜像,镜像数据会保存八天。此时,AWR中已经没有对应的数据镜像了。
SQL> select snap_id, dbid, startup_time from dba_hist_snapshot;
SNAP_ID DBID STARTUP_TIME
---------- ---------- --------------------------------------------------------------------------------
2、问题缓解
一般数据库故障,通常不是一个单独策略可以解决的。笔者认为:问题分轻重缓急,解决方案也分猛药温补。关键的取舍取决于不同的场景优先级别。在这种情况下,恢复AWR工作,增加sysaux表空间存储是首要需求。
这种操作比较简单,只要单独定位和允许文件自动拓展即可。
SQL> alter database datafile '/data/xxxdb/systs/sysaux01.dbf' autoextend on;
Database altered
SQL> select bytes/1024/1024, AUTOEXTENSIBLE from dba_data_files where tablespace_name='SYSAUX';
BYTES/1024/1024 AUTOEXTENSIBLE
--------------- --------------
1032 YES
Alert log中记录信息。
YSAUX
Wed Sep 30 15:30:13 2015
alter database datafile '/data/xxxdb/systs/sysaux01.dbf' autoextend on
Completed: alter database datafile '/data/xxxdb/systs/sysaux01.dbf' autoextend on
手工测试生成AWR镜像,判断问题是否解决。
SQL> exec dbms_workload_repository.create_snapshot;
PL/SQL procedure successfully completed
SQL> select snap_id, to_char(BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi:ss') from dba_hist_snapshot;
SNAP_ID TO_CHAR(BEGIN_INTERVAL_TIME,'Y
---------- ------------------------------
23383 2015-09-30 15:40:16
在日志中没有新的报错信息出现。可以认为初步问题解决。下一步就是定位问题:为什么会出现sysaux爆棚的情况。
3、深层分析过程
AWR和其他一些性能收集,的确是不断的将数据收集到sysaux表空间里面进行记录。笔者一直认为:任何正确的数据架构模式,必要条件之一就是“有进有出”。数据不断积累,一定要有机制(系统内或者系统外)让数据可以脱离系统。从微观角度看,数据表要维持一个稳定的体积容量结构。
AWR系统也的确是这样。在不断收集数据的时候,也会依据Retention规则(默认为8天)不断将数据Purge掉。无论如何设置,sysaux正常情况下应该是一个固定稳定的大小规格。笔者当前数据库已经运行一两年的时间,要出问题早就出现问题了。说明系统中,有一些数据在不断的“默默长大”,问题在不断的慢慢积累。
尝试检查当前sysaux表空间段结构排名,看有没有与此相关的信息。
SQL> select owner, segment_name, segment_type, bytes/1024/1024 from (select * from dba_segments where tablespace_name='SYSAUX' order by bytes desc) where rownum<5;
OWNER SEGMENT_NAME SEGMENT_TYPE BYTES/1024/1024
---------- ------------------------------ ------------------ ---------------
SYS WRM$_SNAPSHOT_DETAILS_INDEX INDEX 102
SYS WRM$_SNAPSHOT_DETAILS TABLE 88
SYS SMON_SCN_TO_TIME_AUX CLUSTER 80
XDB SYS_LOB0000057474C00025$$ LOBSEGMENT 53.1875
疑问出现了,最大的几个对象中,snapshot赫然出现在其中。当前Snapshot里面没有数据,无论是被自然purge掉,还是认为删掉,都不应该有数据存在。查看基础数据表:
SQL> select count(*) from WRM$_SNAPSHOT_DETAILS;
COUNT(*)
----------
1723102
SQL> select * from WRM$_SNAPSHOT_DETAILS where rownum<5;
SNAP_ID DBID INSTANCE_NUMBER TABLE_ID BEGIN_TIME
---------- ---------- --------------- ---------- -------------------------------
1 1778314713 1 4 05-12??-12 05.00.08.719 ????
1 1778314713 1 5 05-12??-12 05.00.08.771 ????
1 1778314713 1 6 05-12??-12 05.00.08.841 ????
1 1778314713 1 7 05-12??-12 05.00.08.892 ????
其中数据量还是很大的,重点在于snap_id。
SQL> select max(snap_id), min(snap_id) from WRM$_SNAPSHOT_DETAILS;
MAX(SNAP_ID) MIN(SNAP_ID)
------------ ------------
23383 1
“慢慢变大”的数据找到了,作为AWR基础的数据,从来就没有被删除。手工删除呢?是不是可以删除?
SQL> select snap_id from dba_hist_snapshot;
SNAP_ID
----------
23383
SQL> exec dbms_workload_repository.drop_snapshot_range(1,23383);
PL/SQL procedure successfully completed
SQL> select snap_id from dba_hist_snapshot;
SNAP_ID
----------
SQL> select max(snap_id), min(snap_id) from WRM$_SNAPSHOT_DETAILS;
MAX(SNAP_ID) MIN(SNAP_ID)
------------ ------------
23383 1
SQL> select max(snap_id), min(snap_id) from WRM$_SNAPSHOT;
MAX(SNAP_ID) MIN(SNAP_ID)
------------ ------------
删除的数据,没有连带将基础数据表WRM$_SNAPSHOT_DETAILS内容删除。诡异的问题!
经过查证MOS,发现该数据表不能删除是一个Oracle Bug,具体描述如下:
Bug 9797851 - WRM$_SNAPHOST_DETAILS is never purged
The verification criteria for the bug are:
Drop a range of snap id's using dbms_workload_repository.drop_snapshot_range()
Check the corresponding snap id's in WRM$_SNAPSHOT_DETAILS.
If snap id's from the range that you chose to drop are still present, then you are hitting this bug.
The following solutions are available:
The Patch 9797851 for unpublished Bug 9797851 is available for some platforms and can be downloaded from My Oracle Support
If the patch is not available on your platform on a supported version, please contact Oracle Support.
This issue will be fixed from release Oracle 12.1
As a workaround, it is possible to manually purge the range of snap id's from the table WRM$_SNAPSHOT_DETAILS using appropriate delete statments under the guidance of Oracle Support.
其中内容所,如果要解决这个问题,需要进行补丁操作,或者在Oracle Support指导之下手工进行删除。
由于是生产环境,经过协调,认为当前开启拓展sysaux策略是可以接受的解决方案。于是笔者打算适可而止,不影响系统正常运行。
4、恢复自动AWR收集
最后需要恢复AWR收集。注意:在一些资料中,建议最开始有一个snapshot,通过手工创建,之后Oracle才能自动的进行生成。
为了快速验证,调整收集周期是10分钟。
SQL> exec dbms_workload_repository.create_snapshot;
PL/SQL procedure successfully completed
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>10);
PL/SQL procedure successfully completed
SQL> select * from dba_hist_wr_control;
DBID SNAP_INTERVAL RETENTION TOPNSQL
---------- --------------------------------------- --------------------------------------- ----------
1778314713 +00000 00:10:00.0 +00008 00:00:00.0 DEFAULT
经过一段时间,可以看到数据变化。
SQL> select snap_id, to_char(BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi:ss') from dba_hist_snapshot;
SNAP_ID TO_CHAR(BEGIN_INTERVAL_TIME,'Y
---------- ------------------------------
23384 2015-09-30 16:07:51
SQL> select snap_id, to_char(BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi:ss') from dba_hist_snapshot;
SNAP_ID TO_CHAR(BEGIN_INTERVAL_TIME,'Y
---------- ------------------------------
23384 2015-09-30 16:07:51
23385 2015-09-30 16:39:32
SQL> select snap_id, to_char(BEGIN_INTERVAL_TIME,'yyyy-mm-dd hh24:mi:ss') from dba_hist_snapshot;
SNAP_ID TO_CHAR(BEGIN_INTERVAL_TIME,'Y
---------- ------------------------------
23384 2015-09-30 16:07:51
23385 2015-09-30 16:39:32
23386 2015-09-30 16:50:17
恢复60分钟收集。
SQL> exec dbms_workload_repository.modify_snapshot_settings(interval=>60);
PL/SQL procedure successfully completed
问题解决。
5、结论
经过这个案例,笔者的感受有两条。首先,定期检查alert log,检查系统性能数据情况是非常重要的运维手段。要么依靠自动监控工具,要么依靠运维人员的日常工作。所谓“养病如养虎,虎大必伤人”在运维领域同样存在。其次就是“有可为,有可不为”,发现问题时候,要根据情形进行分析,找到技术、管理、业务的平衡点。
【ORACLE】awr报告问题分析的更多相关文章
- Oracle AWR报告详细分析--比较详细
https://blog.csdn.net/demonson/article/details/79474133
- (原创)如何在性能测试中自动生成并获取Oracle AWR报告
版权声明:本文为原创文章,转载请先联系并标明出处 由于日常使用最多的数据库为Oracle,因此,最近又打起了Oracle的AWR报告的主意. 过去我们执行测试,都是执行开始和结束分别手动建立一个快照, ...
- ORACLE AWR报告生成步骤
ORACLE AWR报告生成步骤 (以PL/SQL中命令窗口为例) 1.sqlplus或plsql的commod窗口(命令窗口)运行命令 @D:\oracle\product\10.2.0\db_1\ ...
- 快速熟悉 Oracle AWR 报告解读
目录 AWR报告简介 AWR报告结构 基本信息 Report Summary Main Report RAC statistics Wait Event Statistics 参考资料 本文面向没有太 ...
- Oracle AWR报告指标全解析-11011552
1-5 Top 5 Timed EventsWaits : 该等待事件发生的次数, 对于DB CPU此项不可用Times : 该等待事件消耗的总计时间,单位为秒, 对于DB CPU 而言是前台进程所消 ...
- Oracle AWR 报告详解
转自:http://blog.csdn.net/laoshangxyc/article/details/8615187 持续更新中... Oracle awr报告详解 DB Name DB Id In ...
- Oracle AWR报告生成和性能分析
目录 一.AWE报告生成步骤 1.1 工具选择 1.2 自动创建快照 1.3 手工创建快照 1.4 生成AWR报告 二.AWR报告分析 2.1 AWR之DB Time 2.2 AWR之load_pro ...
- [转]oracle awr报告生成和分析
转自:http://blog.csdn.net/cuker919/article/details/8767328 最近由于数据库cpu占用非常高,导致VCS常常自动切换,引起很多问题. 最近学习一下数 ...
- ORACLE AWR报告生成过程出现多个实例记录分析
在一次生成AWR报告中,发现在"Instances in this Workload Repository schema"部分,出现了多个实例记录信息(host敏感信息被用host ...
随机推荐
- 工具-Redis-使用(99.6.2)
@ 目录 1.启动 2.数据结构 3.String命令 4.其他常用命令 5.Hash命令 6.List命令 7.Set命令 8.Zset命令 关于作者 1.启动 redis-server 交互 re ...
- 工具-Git与GitHub-分支管理(99.5.2)
@ 目录 1.分支介绍 2.基本使用分支 1.查看分支 2.创建一个分支dev并切换到其上进行工作 3.在dev分支中变更已经追踪的文件,并进行提交 4. dev分支的工作完成,可以切换回master ...
- 使用docker-maven-plugin打包
今天在部署的时候遇到点问题,总结一下,docker部署的步骤,如果对您有帮助,关注一下,就是对我最大的肯定, 谢谢! 微服务部署有两种方法: (1)手动部署:首先基于源码打包生成jar包(或war包) ...
- 使用基于Vue.js和Hbuilder的混合模式移动开发打造属于自己的移动app
近几年,混合模式移动应用的概念甚嚣尘上,受到了一些中小型企业的青睐,究其原因,混合模式开发可以比传统移动开发节约大量的开发成本和人力成本. Hybrid App(混合模式移动应用)是指介于web-ap ...
- Python 带你高效创作短视频,视频创作秀到飞起!!!
近两年,抖音.快手将短视频推到风口浪尖上,要生产出高质量的视频,离不开视频剪辑这一环节:在全民剪片浪潮中,大众使用最多的剪辑软件如:Pr.FCPX.剪印.Vue 等. 视频剪辑过程中,Python 一 ...
- 给小白整理的一篇Python知识点
1.基本概念 1.1 四种类型 python中数有四种类型:整数.长整数.浮点数和复数. python中数有四种类型:整数.长整数.浮点数和复数. 整数, 如 1 长整数 是比较大的整数 浮点数 如 ...
- 顶会两篇论文连发,华为云医疗AI低调中崭露头角
摘要:2020年国际医学图像计算和计算机辅助干预会议(MICCAI 2020),论文接收结果已经公布.华为云医疗AI团队和华中科技大学合作的2篇研究成果入选. 同时两篇研究成果被行业顶会收录,华为云医 ...
- 我的 2020:出书、办签售会、发展 VS Code 中文社区、成为开源先锋、全网 10 万粉丝、10 场演讲、内推 21 人、955.WLB 发扬光大
感觉写 2019 年终总结还是在不久之前.转眼间,2020 已经接近尾声了.是时候来写写 2020 年的年终总结了. 出书 今年最高兴的事情之一,就是出了全球首本 VS Code 中文书 -- < ...
- Centos7 根目录存储空间扩展方法
Centos7 根目录存储空间扩展方法 一.首先通过 df -hl 命令查看磁盘占用情况,其中根目录已经被占满,此时需要对其进行扩容 二.针对虚拟机环境的centos7系统根存储空间扩容,可利 ...
- 【C++】C++之类型转换
作者:李春港 出处:https://www.cnblogs.com/lcgbk/p/14209848.html 目录 一.前言 二.static_cast 2.1 使用场景 2.2 实例 三.dyna ...