分享缩略图

分享到:
链接已复制
首页> 新闻中心>

gc buffer busy acquire导致的重大数据库性能故障

2025-06-24 12:32:45

来源:新华网

字体:

📢📢📢📣📣📣
作者:IT邦德。
中国DBA联盟(ACDU)成员,DBA工作经验10余年。
Oracle、PostgreSQL ACE。
CSDN博客专家及B站知名UP主,全网粉丝10万,#43;
主流Oracle、MySQL、PG、高斯和Grenplum备份恢复c;
安装迁移#xff00c;性能优化,故障应急处理。

文章目录。

春节过得太热闹了,工作真的没有状态󿀌这不仅仅是一个重大性能故障,整整一天,后面的领导都站成了一排,这一次,我将与大家分享详细的故障分析过程!

故障发生在凌晨,核心应用卡顿非常严重c;Oracle数据库直接夯实,异常等待事件GC等待事件 buffer busy acquire,以及一些索引和行锁的竞争。

1. 首次定位。

首先,通过alert日志调查发现 index unusable,怀疑触发bug ,见 Doc ID 849070.1,数据库分区索引出现大面积故障,首先,停机进行索引重建。

--无论是全局索引还是本地索引,只要数据移动࿰出现c;那么索引或分区索引就会失效:1)对包含数据的分区执行分区表 TRUNCATE、DROP 操作会导致分区表全局索引失效,分区索引仍然有效,如果操作分区没有数据,那么索引的状态就不会受到影响。需要注意的是,,对分区表的 ADD 操作不影响分区索引和全局索引。2)执行 EXCHANGE 操作后,全局索引和分区索引将被无条件地放置 UNUSABLE(无论分区是否包含数据)。但是,若包含 INCLUDING INDEXES 子句(缺省时为 EXCLUDING INDEXES),全局索引会失败,分区索引仍然有效。3)如果执行 SPLIT 目标分区包含数据,那么在执行 SPLIT 操作后,全局索引和分区索引将被列为 UNUSABLE。如果执行 SPLIT 目标分区没有数据,那么索引的状态就不会受到影响。4)执行分区表 MOVE 操作后,全局索引和分区索引将无效。5)手动置其无效:ALTER INDEX IND_OBJECT_ID UNUSABLE;。对于分区表,,除了 ADD 操作外,TRUNCATE、DROP、EXCHANGE 和 SPLIT 操作会导致全局索引失效,但是可以加 UPDATE GLOBAL INDEXES 让全局索引不失效。

2. 二次定位。

在处理索引故障问题后,GC等待事件发现异常等待 buffer busy acquire仍然存在,索引和行锁消失了,然后分析ADDM报告󿀌发现堵塞的SQL占据了大量IO,多变的数据库执行计划#xff0c;绑定执行计划,收集统计信息。

同时发现大量并行,然后取消并行度。

3. 最终定位。

异常等待事件gc buffer busy acquire仍然存在,开始全方位定位分析,所有异常都集中在网络上。

进一步分析AWR报告,实例2心跳网络延迟很高。

硬件介入调查系统日志发现,duwn࿰继续出现在新跳网卡上c;up状态,此时心跳网ping发现节点间心跳网有问题,最高延迟358ms!

4.反思。

该故障是由硬件引起的数据库性能事故,数据库服务器双节点之间的心跳网线连接接触不良 buffer busy acquire异常等待,最终导致数据库夯实。
故障排查处理方法过于局限性,我将在这里进行gc buffer busy acquire异常等待事件的所有可能原因总结如下:

整改措施。

心跳线直接,接触不良容易发生,改造方式为单网线实现网卡网卡聚合,心跳线直接替换换位交换机。

心跳直接连接的风险如下:1.网线接触不良导致集群不稳定󿀌2.将集群节点总数限制为2,3.网线再次松动󿀌会导致GC等待。

总结。

报告分析收集的月度综合,可以更快地定位故障,稳定,拿着它󿀑

更多内容请关注视频号。

👇👇👇👇
在这里插入图片描述

【责任编辑:新华网】
返回顶部