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;性能优化,故障应急处理。
文章目录。
- 1. 首次定位。
- 2. 二次定位。
- 3. 最终定位。
- 4.反思。
- 整改措施。
- 总结。
春节过得太热闹了,工作真的没有状态这不仅仅是一个重大性能故障,整整一天,后面的领导都站成了一排,这一次,我将与大家分享详细的故障分析过程!
故障发生在凌晨,核心应用卡顿非常严重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等待。
总结。
报告分析收集的月度综合,可以更快地定位故障,稳定,拿着它
更多内容请关注视频号。
👇👇👇👇