测试环境有套库,开发人员反映cpu使用率非常高,但是他们没有在数据库执行什么语句。
我生成了awr和实时查看库上语句执行情况,发现有如下语句,一直占有cpu资源:
select s.synonym_name object_name, o.object_type
from all_synonyms s, sys.all_objects o
where s.owner in ('PUBLIC', :schema)
and o.owner = s.table_owner
and o.object_name = s.table_name
and o.object_type in ('TABLE',
'VIEW',
'PACKAGE',
'TYPE',
'PROCEDURE',
'FUNCTION',
'SEQUENCE')
该语句的等待事件是:row cache mutex
数据库版本是12.2,我怀疑是不是踩了相关bug,但是在metalink上找了一圈,没有任何发现。感觉很诡异。
然后发现,只要是plsql developer连到数据库上,便会有一个执行上述语句的会话存在,占用100%的cpu(服务器4c,单颗cpu 100%)
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
遇到这种比较奇怪的问题,百度真的毫无用处,已经不止一次如此。这里强烈推荐下微软的bing,自从推出国际版后,真心强大了许多。
这次也是通过国际版的搜索,找到了一篇文章,讲述了同样的问题。
说是由于plsql developer的bug导致,通过修改plsql developer配置可以解决:
It’s caused by the Describe Context Option of Code Assistant. To disable it:
Tools > Preferences > Code Assistant and disable the “Describe Context” option.
将“描述前后文关系”这一项的勾选给去掉。
测试发现,去掉后再连接数据库,果然不会出现之前遇到的问题。我plsql developer版本是9的,高版本中应该不会出现该问题
但是感觉比较奇怪的事,我电脑上的plsql developer工具一直在用,以前也没有发现会导致cpu冲高的问题,亦或是之前没有关注。