RAC等待事件:gc buffer busy acquire
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,今天监控一直报等待事件异常,查了下数据库基本都是gc buffer busy acquire等待事件。这个等待事件之前一直没接触过,今天特意了解下。 参考文档:Oracle Mos 一、简要定义 该等
千家信息网最后更新 2024年11月23日RAC等待事件:gc buffer busy acquire今天监控一直报等待事件异常,查了下数据库基本都是gc buffer busy acquire等待事件。这个等待事件之前一直没接触过,今天特意了解下。 参考文档:Oracle Mos 一、简要定义 该等待事件仅适用于RAC环境,类似于非RAC环境中的"buffer busy"等待。 当会话正在等待访问另外一个会话正在适用和持有的块且无法共享该块时,会发生这种情况。多个会话可能会排队等待同一个块。 在11.1和更早版本中,这种类型的等待被分为"gc buffer busy"等待。 从Oracle 11.2开始"gc buffer busy"等待被分为两个新的等待类别:
OSWatcher中的netstat和CHM输出中的Nic&Protocol部分可以提供有关网络运行状况的信息。
- gc buffer busy acquire
- gc buffer busy release
gc buffer busy release:是在本地实例session 1之前已经有远程实例session 2请求访问了本地实例的相同buffer,并且没有完成,那么本地实例的session 1就是在等待gc buffer busy release。
二、一般原因- High contention in particular HOT blocks of the objects
- Other waits like "gc block busy" and "enq: TX - row lock contention
- High network latency or a problem with network
Busy server or active paging/swapping due to low free memory
Individual waits-(用于在GV$SESSION_WAIT中看到的等待)
P1 File #P2 Block #P3 Mode requested/mode held/block classSECONDS_IN_WAIT Amount of time waited for the current eventfile# This is the file# of the file that Oracle is trying to read from.block# This is the starting block number in the file from where Oracle starts reading the blocks.blocks This parameter specifies the number of blocks that Oracle is rying to read from the file# starting at block#Inst_id instance numberTo determine the root blocker for sessions waiting on the gc wait events use the below options1.system state dump at cluster level2. oratop displays waiters/blockers3. v$wait_chains can be used to find the root blocker for sessions that are blocked,Troubleshooting Database Contention With V$Wait_Chains (Doc ID 1428210.1)4. Using v$hang_info, v$hang_session_info, etc5. Oracle Hang Manager (Doc ID 1534591.1)Using the above information we can find the sessions waiting for specific gc events with their final blockers at instance level
System Wide wait-(用于在V$SYSTEM_EVNET中看到的等待)
如果等待缓冲区花费的时间较长,则需要根据以下内容确定哪个段遭受争用:SELECT inst_id, sid, event, wait_class, P1, P2, P3 Mode requested / mode held / block class, seconds_in_wait FROM gv$session_wait WHERE event LIKE 'gc buffer%';从前面的输出中,使用P1和P2中的数据,可以使用以下命令获得相关的对象信息以下查询:SELECT segment_name FROM dba_extents WHERE file_id = &file AND &block BETWEEN block_id AND block_id + blocks - 1 AND ROWNUM = 1;三、故障排查 1)特定HOT块的争用较高 这是由于大量并发插入导致过多的索引块拆分或带有从序列生成的键的右增长索引。 buffer busy 会频繁伴随着这一点。如果问题仍然存在,可以使用 System Wide wait-(用于在V$SYSTEM_EVNET中看到的等待)说明寻找热块。或者从问题时期的AWR报告的 Segments by Global Cache Buffer Busy获取问题segment。
2)gc block busy、enq: TX - row lock contention以及其他等待可能会影响阻止会话或者LMS进程。
如果还有其他等待可能会使块的持有者放慢速度,则解决该问题是当务之急,因为gc buffer busy acquire/release可能只是该等待的副作用。 检查AWR报告中的 Top 10 Foreground Events by Total Wait Time部分,以查看其他等待是否显着影响数据库的性能。3)高网络延迟或网络问题
发出 "ping -s 10000 <数据库使用的HAIP IP地址或私有IP地址>"并按照文档执行网络检查( How to Validate Network and Name Resolution Setup for the Clusterware and RAC (Doc ID 1054902.1)) 对于过去发生的问题的RCA,请检查OSWatcher以获取ping延迟时间。 AWR报告将包含 Interconnect Ping Latency Stats,这对于检查网络延迟也很有用。OSWatcher中的netstat和CHM输出中的Nic&Protocol部分可以提供有关网络运行状况的信息。
4)繁忙的服务器或活动的页面调度/交换(由于可用内存不足)
检查vmstat输出或CHM输出,以查看服务器是否繁忙或大量的分页/交换。 对于过去发生的问题的RCA,请检查CHM或OSWatcher输出。5)低效SQL语句
低效SQL语句会导致不必要的buffer被请求访问,增加了buffer busy的机会。在AWR中可以找到TOP SQL。解决方法可以优化SQL语句减少buffer访问。这点与单机数据库中的buffer busy waits类似。 关于select是否会导致gc buffer busy acquire:- 查询一般以shared模式请求buffer,但是如果buffer不在buffer cache中,那么需要IO将buffer 读到内存中,这个过程需要以exclusive模式,如果同时有大量其他的session也请求查询该buffer(以shared 模式请求),那么就会有buffer等待了,此时可能buffer cache不够大。
- 如果查询请求的block已经被修改了,查询需要访问CR块,为了重构CR块,需要读取对应的undo block,如果undo block不在buffer中,需要IO把undo block读到内存,如果有大量查询访问这个CR块,那么都会有buffer busy等待了。
7)Oracle Bug
四、可能的解决方案 对于高争用和热块:Solution is to reorganize the index in a way to avoid the contention or hot spots using the below optionsI. Global Hash partition the indexCREATE INDEX hgidx ON tab (c1,c2,c3) GLOBAL PARTITION BY HASH (c1,c2) (PARTITION p1 TABLESPACE tbs_1, PARTITION p2 TABLESPACE tbs_2, PARTITION p3 TABLESPACE tbs_3, PARTITION p4 TABLESPACE tbs_4);II. Recreate the index as reverse key index (not suitable for large table, could require buffer cache increased accordingly)III. If index key is generated from a sequence, increase cache size of the sequence and make the sequence 'no order' if application supports it.Refer the doc link: http://docs.oracle.com/database/121/VLDBG/GUID-BF3F38E1-62BB-4EE3-86C1-A2EF8A258B1F.htm#VLDBG1089
对于enq: TX - row lock contention:
Mode 4-Related to ITL waits从AWR报告或使用以下SQL查找具有较高ITL等待的段:SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM V$SEGMENT_STATISTICS WHERE STATISTIC_NAME = 'ITL waits' AND VALUE > 0 ORDER BY VALUE;增加这些高ITL等待的segment的inittrans值Mode 6-Primarily due to application issue:这是一个应用程序问题,需要应用程序开发人员来调查所涉及的SQL语句。 以下文档可能有助于进一步深入研究:Note:102925.1 - Tracing sessions: waiting on an enqueueNote:179582.1 - How to Find TX Enqueue Contention in RAC or OPSNote:1020008.6 - SCRIPT: FULLY DECODED LOCKINGNote:62354.1 - TX Transaction locks - Example wait scenariosNote:224305.1 -Autonomous Transaction can cause locking
How to Validate Network and Name Resolution Setup for the Clusterware and RAC (Doc ID 1054902.1)
How to Validate Network and Name Resolution Setup for the Clusterware and RAC (Doc ID 1054902.1).pdf
数据
实例
问题
数据库
查询
检查
网络
输出
事件
报告
语句
应用
不同
相同
内存
应用程序
文档
模式
正在
程序
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
西城区现代软件开发规定
番禺区光纤网络技术开发动态
软件开发生命周期分为多个循环
服务器的电源适配器是什么
中国引文数据库核心期刊
大连锦程物流网络技术
湖州信息网络技术
全国网络安全等级测评
学网络安全知识手抄报
网络安全法学习
湘潭快速软件开发
新乡乐游网络技术有限公司
软件开发行业会计科目
1333服务器内存超1600
镜像服务器和重装系统
公安局网络安全品牌
高中生网络安全培训课程
串口服务器和wincc连接
软件开发培训班哪种好
c xml 数据库
杭州国企软件开发招聘 2021
服务器的电源适配器是什么
服务器在国内如何管理
无线与手机网络安全pdf
北京凌霄互动网络技术有限公司
汉得数据库
践行互联网科技有限公司
遵守网络安全法发言稿
7.2魔兽世界数据库修改
查看京东数据库