zoukankan      html  css  js  c++  java
  • Oracle-跑批缓慢之GC等待

    背景

    某银行客户,RAC 11.2.0.4 Linux环境在7月14日进行跑批业务,平时20分钟左右完成,今日将近2个小时才完成,客户反馈,跑批任务一直在1节点进行,现给出4份AWR报告,希望分析故障原因。(报告包含2份正常时段和2份异常时段)

    问题分析

    1、对比4份报告--正常时段

    根据2份正常时段的报告抬头,跑批任务确实在1节点运行,26分钟完成跑批任务,与客户反馈相符

    2、对比4份报告--异常时段

    再观察2份异常时段的报告抬头,发现RAC 双节点的DB运行时间均在2个半小时,与客户之前反馈,任务只在一节点跑,不相符,由此我们大概可以判断问题的方向,1)可能是任务被负载均衡到2个节点,2)可能任务直接就在2节点运行

    3、分析4份报告Load Profile

    因正常时段主要在1节点,我们可以注重分析1节点报告,进而和异常时段的两份报告做对比。

    • 正常时段
    • 异常时段


      根据跑批时段产生的redo size 大小,我们可以判断,正常时段节点1和异常时段节点2,产生redo size 大小一致,对此,我们可以断定,异常时段的跑批任务肯定是在2节点运行。

    4、异常时段在2节点跑批验证

    仅仅根据redo size如果不能说服,我们可以进一步分析,执行跑批的具体SQL。和客户沟通后,我们在正常时段节点1找到跑批的主SQL语句,同样的,我们在异常时段的2节点发现执行跑批SQL,且运行时间较长,这就进一步验证异常时段跑批任务是在2节点进行。

    • 正常时段
    • 异常时段

    5、结论

    由于本次跑批任务,由于某种原因,在2节点执行,所以导致跑批较慢???
    如果只给客户一个这样的回复,相信是没有说服力,毕竟是RAC环境,数据是一样,为什么在2节点,就会变慢,且看下面分析。

    问题深入分析

    1、异常时段AWR等待事件

    通过分析异常时段AWR,可以发现,在1、2节点,均有大量的GC相关的等待事件,gc buffer busy acquire、gc buffer busy release、gc cr block busy等,而正常时段也有类似的等待事件,但远远没有异常时段的严重。


    关于GC,在网上都有比较详细的说明,我们在此简单提下,在RAC环境,有Cache Fusion(内存融合)机制,可以实现多节点的缓存数据共享,如果比较频繁,就会有大量的GC相关等待事件,类似今天处理的故障AWR中一样,说白了就是跨节点访问内存数据,针对本案例,此事件的发生是比较正常,因为平时数据都缓存在1节点,突然在2节点执行任务,就会有过多的GC,而GC的处理方法,基本都是分割应用,或者分割表,尽量避免频繁的多节点数据访问。

    问题总结

    对于本案例中,问题的本源比较容易发现,这也依赖前期与客户沟通的结果,提前预知跑批任务主要在1节点,给接下来的问题分析带来了极大的帮助,另外客户同时提供正常和异常时段的报告,也有助于进行的事件对比,所以,我们在以后的问题处理中,可遵循以下几点。

    • 事先和客户沟通故障情况(本次沟通结果,正常时段1节点执行 20分钟完成,异常时段2个小时)
    • 故障前是否有变更操作(本次沟通结果,无此步,但应该是其他原因造成的跑批任务漂移)
    • 采取正常和异常对比快速定位(本次客户直接提供正常和异常的AWR)
    • 交付客户结果(本次案例,通过定位在节点2执行,产生大量GC)
      当然,处理问题的方式不是一成不变,针对不同情况还需不同对待,但整体先后流程不能少,比如一上去就敲键盘的工程师是不可能真正处理问题。
  • 相关阅读:
    软件工程第二次结对作业
    实验 6:OpenDaylight 实验——OpenDaylight 及 Postman 实现流表下发
    实验 5:OpenFlow 协议分析和 OpenDaylight 安装
    实验 4:Open vSwitch 实验——Mininet 中使用 OVS 命令
    软件工程第一次作业
    实验 3:Mininet实验——测量路径的损耗率
    软件工程个人总结
    2020 SDN第七次上机实验
    软件工程实践第4次作业-结对编程之实验室程序实现
    2020 SDN第六次上机实验
  • 原文地址:https://www.cnblogs.com/bicewow/p/13304478.html
Copyright © 2011-2022 走看看