数据库环境
系统红旗linux 7.3,内存大页设置。SGA稍微小于内存大页设置,PGA设置250G。主机内存1T。
数据库版本11.2.0.4.16xxxx
现象
早晨期间,每次跑起存储过程,就会出现ORA-00445
我们通过OEM来观察的,每天只要这个存储过程启动以后,OEM就会出现断掉。过半小时就会启动。
zabbix观察发现有断掉的问题。
检查步骤
- 确认时间段发生问题5-8点
- AWR报告是否正常收集,没有正常收集。
- 是否有ORA报错,有
- 是否能生成awr报告,能收集5-8点的AWR报告
- zabbix告警 的CUP IO等是否正常,否,该时间段有断开
- oem查询怎样,oem查询agent有断开,说明这个时间段内存有可能有问题,导致内存不足。
- 后台日志查询ORA-00445这个产生的日志,发现内存确实不足。
- 查看等待事件次数,确定哪条最多。经过确认发现。
问题解决
确定了该时间段出现的SQL。对其进行分析。发现 直接采用了parallel(t)。这个存储过程已启动,就出现了问题。
建议修改成parallel(t,4) 问题解决。
问题总结
该问题为SQL跑报表过程中,没有进行优化,直接hash查询,采用parallel,并没有合理设置导致。
parallel的机制,由于跳过了SGA写入,直接写入PGA,PGA超过了内存限度导致。
SQL优化的过程中,应该详细分析报错日志,反过来查看SQL,这样就能快速定位。尤其是出现了IO忽然降下来的情况,一般都是parallel参数设置不合理导致的内存爆满,IO无法写入导致。