接到应用侧反应数据库无法连接,登录系统查看集群状态:
发现集群状态为:stuckarchiver,此状态数据库开启了归档且归档日志目录满导致的。
核实ASM存储,归档日志大小,以及归档位置:
经定位的确空间不足导致,对归档做了清理后集群状态恢复。
分析归档切换频率:
执行结果:发现该时段有异常的归档日志切换,导致本身充足的200GASM磁盘在短短的2小时被归档撑满(一个归档500M),最终导致数据库故障。
快速定位相关变更对象:
块是oracle数据库的最小存储结构,数据库中增删改都是会记录块变更的,因此快速定位归档日志增长推荐采用块变更视图。
通过块表更快速准确定位相关对象,以及相关sql让业务侧核实业务逻辑;
经查询有一个日志表块变更极度频繁,每一次块变更都基本上对应一次insert操作,数据库默认块大小时8k,而每次insert数据在没有clob字段的情况下,几乎不会超过8K,因此可以快速定位这个期间,该表进行了快速的增删改操作。
经抓取15-16,16-17两个时间段的awr报告发现,这两个时间段有一条insert sql,频繁的执行了几千万次,最终导致归档短时间撑爆ASM磁盘,导致无法正常切换归档的问题。
业务侧找到了导致死循环的任务,将任务停止后,归档不再增加,系统恢复正常。但是短期的insert导致的表空间增长是势必要解决的,但是当我们分析数据库大对象是发现,导致短时间产生750个归档,近300G存储容量的表,实际上只有24G,客户对此有点疑问,一般情况下归档日志肯定记录要大于表数据,毕竟日志记录的要多一点,但是为了更好的比对一下比例不妨做一个简单的实验。
截图:问题数据库中大对象存储明细
前期准备:
数据库版本 | 11.2.0.4.0 |
归档状态 | 已开启 |
第一步:清空测试环境归档目录
切换归档日志:保证实验时产生的归档都是插入导致的
Alter system switchlogfile;
清空归档目录:便于观察归档大小
Crosscheckarchivelog all;
delete nopromptarchivelog until time sysdate-0.001;
用于随机导入数据特定的数据
create or replace procedure zzj_test_proc(num1 Number) is begin For cur In 1 .. num1 Loop Insert Into zzj_test_awr Values(cur,Sysdate); If Mod(cur,100)=1 Then Commit; End If; End Loop; Commit; end zzj_test_proc; |
第三步:调用插入实验过程观察相关待验证结果
1:调用存储过程:Callzzj_test_proc(100000);
2:切换日志看归档日志大小
Alter system switchlogfile;
发现当前归档日志足足产生了41M
3:核实块表更情况
快变更依赖dba_hist_snapshot视图,此视图依赖于快照信息,所以执行完后需要手工收集一下数据库快照
手工收集快照:
begin
dbms_workload_repository.create_snapshot();
end;
/
详细见截图:
可以看到块变更次数几乎满足于存储过程执行的次数,再一次证明每一次插入都会对应一次块变更的记录更新。
核实插入十万行数据表大小的变化:
我们可以看到表大小仅仅变化了3M,而归档足足增加了41M,综上可以判断日志产生基本上是数据的十倍以上,这也解释了,为啥短时间归档日志产生了足足300G,而表空间增长却很缓慢。
归档和表数据增长的明显不成比例,当发现归档的过度增加是因为某一个对象导致的,而对象存储的增长却明显很低,这种显然很难从对应的官方文档或是MOS上找到想要的解释,而这种现象却可以通过简单地实验去验证自己的设想,显然如上实验清晰明了的证明了归档日志的数据存储的确远大于数据库表记录存储占用的空间,在专注技术的道路上,学会实验验证自己的猜想很重要。
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/129957.html
摘要:截止年月日,迅雷全年总营收约为亿美元,较年增长。第四季度总营收约为万美元,同比增长,环比增幅,是迅雷连续个季度营收增长以来的最高增幅,也是迅雷自年上市以来的最高纪录。其中,云计算业务的收入增长最为迅猛。北京时间3月15日上午,迅雷正式公布了2017年第四季度及全年未经审计的财务报告。截止2017年12月31日,迅雷全年总营收约为2亿美元,较2016年增长43.2%。第四季度总营收约为8240...
摘要:更新语句以上就是一条查询的执行流程,那么接下来我们看看一条更新语句如何执行的呢语句如下张三我们来给张三修改下年龄,在实际数据库肯定不会设置年龄这个字段的,不然要被技术负责人打的。 该文已加入笔主的开源项目——JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目),地址:https://github.com/Snailclimb/JavaGuide 。觉得不错...
摘要:当前人才极度紧缺,据中国人才生态白皮书研究分析,到年底,我国人工智能人才缺口将突破万,到年,这一数字将攀升到万。最近,已经上升到语言流行度指数的第四名。 showImg(https://upload-images.jianshu.io/upload_images/13825820-441c48554e878284.jpg?imageMogr2/auto-orient/strip%7Ci...
摘要:当前人才极度紧缺,据中国人才生态白皮书研究分析,到年底,我国人工智能人才缺口将突破万,到年,这一数字将攀升到万。最近,已经上升到语言流行度指数的第四名。 showImg(https://upload-images.jianshu.io/upload_images/13825820-441c48554e878284.jpg?imageMogr2/auto-orient/strip%7Ci...
阅读 1346·2023-01-11 13:20
阅读 1684·2023-01-11 13:20
阅读 1132·2023-01-11 13:20
阅读 1858·2023-01-11 13:20
阅读 4099·2023-01-11 13:20
阅读 2704·2023-01-11 13:20
阅读 1385·2023-01-11 13:20
阅读 3594·2023-01-11 13:20