1、事件
1.1、事件现象
21年7月10、24、31日期间虫虫经历了连续3个周六上午8点半-9点之间,生产环境中几台关键应用服务器,后台提示“无法获取数据库连接数”,数据库端出现insert语句无法执行超时等待连接池饱和,数据库出现热点快争抢事件,导致线上环境部分业务域瘫痪,同时诡异的是全在上午8点半-9点时间之内。
1.2、事件结论
1、 业务模型中存在一张业务A(简化)表,其自身数据量较大且存在3个clob字段,Oracle数据库针对存在clob字段的表,在长期使用过程中无法进行索引高水位线释放,在一定事件后会直接导致表自身性能较差(主要原因)。
2、 业务处理中存在定时任务,在每周六上午0时执行update语句,目的是清空业务A表中的Clob列的数据,在故障日期(7月10日、7月24日)均有执行,因数据量过大导致执行失败。Oracle本身机制在执行sql语句失败后,会进行undo操作,会导致数据比执行sql期间消耗资源更多。
3、 存在周边定时任务执行存储过程,在每周六上午4.30进行sql语句执行,此语句常规执行耗时会在11个小时左右,涉及Clob字段的数据更新处理。
三者相叠加会导致数据库SGA区热点块争抢,无可用的区域空间,执行的insert语句执行时同样涉及clob字段,造成用户链接数据库会话堵塞。
1.2、事件涉及知识点
1、Orcale Clob字段存储结构以及处理过程
2、Oracle 热点快争抢排查
3、Oracle 表级数据高水位线
4、Oracle Clob大表产生问题后,生成级快速恢复方案
5、Oracle AWR报告解析及相关知识点
5、事件排查过程分享
6、事件排查过程工具及常用命令分享
7、事件排查常用手段分享
8、阿里云服务器DDOS、CC攻击等事件处理及常用排查手段
整理更新中