某项目数据库每天4:00批量任务,不定期会在批量过程中执行一条sql的时候整个sql hang住,然后就批量hang起来。
先推断是执行计划问题,后来更新执行计划后,仍旧会hang住
后来通过ash查看故障sql
INSERT /*+ append */INTO xxx (xxx_NO, ........ ) (此处为客户保密sql,仅表达sql类型,即使用insert append的hint时会触发bug)
然后MOS上查看在rac模式下,insert append有可能导致gc current request的bug
(Bug 18280813 : INSERT /*+ APPEND */ STUCK IN GC CURRENT REQUEST)
解决办法是修改一个隐含参数,修改方法,
alter system set "_gc_read_mostly_locking"=FALSE scope=spfile sid='*';
然后需要将数据库重启才能生效查询是否生效select x.ksppinm name,y.ksppstvl valuefrom sys.x$ksppi x,sys.x$ksppcv ywhere x.indx=y.indx and substr(x.ksppinm,0,1)='_' and x.ksppinm like '%gc_read_mostly%';
观察一段时间后批量任务不会hang死
本文介绍了一个Oracle RAC环境中遇到的SQL挂起问题及其解决方案。通过对执行计划的调整未能解决问题,最终通过ASH发现是使用INSERT /*+APPEND*/ hint导致的GCCURRENT_REQUEST挂起。通过设置隐含参数_gc_read_mostly_locking为FALSE解决了该问题。

1271

被折叠的 条评论
为什么被折叠?



