1、现象
2017年年底某一天,接到电话,某业务系统突然出现异常、基本不可用,该业务系统使用的是oracle 12.2.0.1.0 RAC。
2、处理
查看告警日志,发现有部分客户端连接超时的报错;
查看等待事件,发现两个节点上都有大量(七八百)的等待事件:
cursor: mutex X
通过和应用维护厂家沟通,决定通过重启数据库,优先恢复业务;
3、原因
后续查找原因,经查证、发现是Oracle 12.2版本的参数_cursor_obsolete_threshold默认设置不合理
The default value for _cursor_obsolete_threshold is 1024 pre 12.2, but has increased to 8192 in 12.2.
Set _cursor_obsolete_threshold=1024 in CDB
level:
example command:
alter system set "_cursor_obsolete_threshold"=1024
scope=spfile;
restart the database
4、处理
已经按照oracle的建议调整了隐含参数,但这是个静态参数、要重启整个CDB才生效、因为集群环境还有其他业务系统的pdb数据库在用,所以需要协调一个维护时间窗口来重启整个CDB。
5、建议
新版本的数据库上线前应该多做压力测试、功能测试等,并且尽可能优化默认参数(最好有oracle原厂的咨询和建议)
6、获取
select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
from x$ksppi a,x$ksppcv b
where a.indx = b.indx
and a.ksppinm like '¶meter';
_cursor_obsolete_threshold
select a.ksppinm name,b.ksppstvl value,a.ksppdesc description
from x$ksppi a,x$ksppcv b
where a.indx = b.indx
and a.ksppinm like '_cursor_obsolete_threshold';