RAC性能分析 - gc buffer busy acquire 等待事件
概述
---------------------
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
2. session#931,serial#39657 也是处于等待状态,等待事件是'gc buffer busy acquire',而'gc buffer busy
acquire'的持有者是session#1324,serial#22503
3. session#1324,serial#22503 也是处于等待状态,等待事件是'gc current request'
通过分析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
转载于:https://www.cnblogs.com/wcwen1990/p/6660395.html
RAC性能分析 - gc buffer busy acquire 等待事件相关推荐
- 分析解决11gR2 双节点RAC环境下的gc cr block busy/gc buffer busy acquire等待
? 系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3 ? AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了 (1) ...
- 2017-03-27Oracle故障gc buffer busy acquire导致数据库不可用
实施反馈系统有20分钟不可用,然后又自动恢复了.先查看alert日志,看到打开文件数不够,系统已经运行几年了,怎么可能呢. Non critical error ORA-48180 caught wh ...
- buffer busy waits等待事件的原因:hot block [转]
http://blog.chinaunix.net/u/24260/showart_456274.html ********************************************** ...
- oracle缓冲等待块,CSS_Oracle数据库buffer busy wait等待事件, 当会话意图访问缓冲存储 - phpStudy...
Oracle数据库buffer busy wait等待事件 当会话意图访问缓冲存储器中的数据块,而该数据块正在被其它会话使用时产生buffer busy waits事件.其它会话可能正在从数据文件向缓 ...
- buffer busy waits等待事件案例-vage
讨厌香草冰激凌的汽车与Buffer busy wiats的故事 记得好几年前看到过一个故事,通用公司曾收到一客户的邮件,邮件中客户描述了一个非常奇怪的问题.他们家有晚饭后去吃冰激凌的习惯,如果他们买的 ...
- oracle+buffer+busy+wait,Oracle数据库buffer busy wait等待事件 (2)
--查找等待块类型 SELECT 'segment Header' CLASS, a.Segment_Type, a.Segment_Name, a.Partition_Name FROM Dba_S ...
- gc buffer busy的优化
12-SEP-07 09.00.17.451 AM 12-SEP-07 05.00.03.683 查看过去一段时间的等待事件类型汇总 select wait_class_id, wait_c ...
- oracle in查询 一直等待,学习笔记:Oracle awr 分析解决inactive transaction branch等待事件...
天萃荷净 通过Oracle AWR报告分析inactive transaction branch等待事件的原因 分析一份awr,发现不太熟悉的等待事件"inactive transactio ...
- oracle的gc告警,防患未然:Oracle gc等待事件的发现、处理与预防
系统环境 两节点的RAC:AIX6.1+Oracle 11.2.0.3.3 AWR里展示出来的各种症状(数据来自实例2) 虽然应用没有报障,但AWR报告里的各种迹象已经很明显了 (1)gc buffe ...
最新文章
- review what i studied `date` - 2017-4-12
- 求链式线性表的倒数第K项(堆栈解法)
- 2021年终总结-向着阳光前进
- 篇二:Eclipse安装配置Maven
- python 修改csv某一列_使用python更改CSV中的列值
- leetcode 561. 数组拆分 I(排序)
- 菜鸟教程工具(三)——Maven自己主动部署Tomcat
- java se 7u67_Java SE 7u72和Java SE 7u71有什么不同
- 华为牛人在华为工作十年的感悟!--总结[华为的10年工作]
- 【路径规划】基于matlab GUI多种蚁群算法栅格地图路径规划【含Matlab源码 650期】
- java注解拦截_轻松实现java拦截器+自定义注解
- terrasolid时间设置
- 远程桌面系统管理员以限制你登入计算机,windows远程连接时:系统管理员已经限制你可以使用的登录类型(网络或交互式)解决办法...
- e4a换行_这个易语言代码用E4A怎么写?
- 计算机信息安全管理实验教程答案,“信息安全”课程习题及参考答案
- Fiddler修改返回数据教程,亲测有效
- 青龙面板-- 咸鱼吃鱼(废-已不能使用)
- 入门:因果推断 简介
- python使用pandas中的to_json函数将dataframe数据写入json文件中
- 《互联网信贷风险与大数据》读书笔记(二)
热门文章
- NPOI从数据库中导出数据到Excel
- c定义一个整型数组_滨州学院C语言作业讲解有序数组插入
- android5.0+art模式,Android 5.0有哪些变化
- 如何界定你的竞争对手?
- php逆波兰表达式,PHP逆波兰示意与表达式计算
- r语言热图对列不进行聚类_R语言:手把手教你画pheatmap热图
- jenkins教程_1 简介
- java权限精确到按钮_搞定权限设计1-页面按钮控制(精确到某个用户和某个按钮)...
- c++ opencv 照片清晰度_PS教程:旧照片翻新修复技巧
- 防止网线中的信号衰减很重要