zoukankan      html  css  js  c++  java
  • RAC性能分析

    概述
    ---------------------
    gc buffer busy是RAC数据库中常见的等待事件,11g开始gc buffer  busy分为gc buffer busy acquire和gc buffer  busy release。
    gc buffer busy acquire是当session#1尝试请求访问远程实例(remote  instance) buffer,但是在session#1之前已经有另外一个session#2请求访问了相同的buffer,并且没有完成,那么session#1等待gc buffer busy acquire。
    gc buffer busy release是在session#1尝试请求访问本地实例buffer时,发现之前已经有远程实例的session#2请求访问该buffer,并且没有完成,那么session#1等待gc buffer busy release。
    原因/解决方法
    ---------------------
    - 热点块(hot block)
    在AWR中Segments by Global Cache Buffer Busy 记录了访问频繁的gc buffer.
    解决方法可以根据热点块的类型采取不同的解决方法,比如采取分区表,分区索引,反向index等等。这点与单机数据库中的buffer busy waits类似。

    - 低效SQL语句
    低效SQL语句会导致不必要的buffer被请求访问,增加了buffer busy的机会。在AWR中可以找到TOP SQL。解决方法可以优化SQL语句减少buffer访问。这点与单机数据库中的buffer busy waits类似。
    - 数据交叉访问。
    RAC数据库,同一数据在不同数据库实例上被请求访问。
    如果应用程序可以实现,那么我们建议不同的应用功能/模块数据分布在不同的数据库实例上被访问,避免同一数据被多个实例交叉访问,可以减少buffer的争用,避免gc等待。
    - Oracle bug
    建议安装Oracle推荐的最新Patch Set和PSU。
    Patch set和PSU信息请参考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)
    案例分享
    ---------------------
    一个gc buffer busy acquire的案例,和大家分享一下。
    - 应用端反映业务处理异常,数据库hang,在第一时间现场DBA收集了hanganalyze (hanganalyze对于分析数据库hang非常重要)
    RAC数据库收集hanganalyze的命令:
    SQL> conn / as sysdba
    SQL> oradebug setmypid
    SQL> oradebug unlimit
    SQL> oradebug -g all hanganalyze 3
    通过hanganalyze我们可以比较容易看到有1000个以上的Chain都有类似的等待关系,比如:
    Chain 1 Signature: 'gc current request'<='gc buffer busy acquire'<='enq: TX -  contention'
    Chain 2 Signature: 'gc current request'<='gc buffer busy  acquire'<='buffer busy waits'

    Chain 1243 Signature: 'gc current request'<='gc buffer busy  acquire'<='enq: TA - contention'
    Chain 1244 Signature: 'gc current request'<='gc buffer busy  acquire'<='enq: TA - contention'

    Hanganalyze说明数据库中大部分session直接或者间接等待'gc  current request'<='gc buffer busy acquire'。

    - 有些情况下dia0 trace文件也会记录hang信息

      inst# SessId  Ser#     OSPID PrcNm Event

      ----- ------ ----- --------- ----- -----

          1   1152     3  21364904    FG gc buffer busy acquire

          1   2481     3  26607642    FG gc current request

    Chain 1 Signature: 'gc current request'<='gc buffer busy acquire'

    Chain 1 Signature Hash: 0x8823aa2a 

    - 有些情况下dba_hist_active_sess_history也会记录hang信息。

    1. 在数据库hang的时间段内,有691个session在等待'enq: TA - contention','enq: TA - contention'的持有者是session#931,serial#39657

    clip_image002
    2. session#931,serial#39657  也是处于等待状态,等待事件是'gc buffer busy acquire',而'gc buffer busy
    acquire'的持有者是session#1324,serial#22503

    clip_image004
    3. session#1324,serial#22503  也是处于等待状态,等待事件是'gc current request'

    clip_image006
    通过分析dba_hist_active_sess_history,也可以得到session等待关系:
    'gc current request'<='gc buffer busy  acquire'<='enq: TA - contention'
    这个等待关系与hanganalyze是一致的。
    - 根据以上分析得到session等待关系,可以确定数据库hang的原因是oracle已知问题Bug
    13787307 - Hang in RAC with 'gc current request'<='gc buffer busy acquire'  signature.

    - 解决方法:
    安装Patch 13787307 或者 设置_gc_bypass_readers=false临时规避这个问题。
    另外,在11.2低版本中也有些类似的已知问题,建议安装最新patch set (11.2.0.3/4) + 最新PSU 。
    Patch set和PSU信息请参考:Oracle Recommended Patches -- Oracle Database (Doc ID 756671.1)

    https://blogs.oracle.com/Database4CN/entry/rac%E7%AD%89%E5%BE%85%E4%BA%8B%E4%BB%B6_gc_buffer_busy_acquire

  • 相关阅读:
    C# 对Outlook2010进行二次开发
    利用AForge.NET 调用电脑摄像头进行拍照
    SQL2012 提示评估已过期 解决方案- sql server问题
    图片转换PDF
    [转载]理解weight decay
    ATTENTION NETWORK分析
    sys.stdout.write和print和sys.stdout.flush
    Flutter免费(视频)教程汇总
    Windows核心编程随笔
    .NET家族
  • 原文地址:https://www.cnblogs.com/wcwen1990/p/6660395.html
Copyright © 2011-2022 走看看