今天去客户那巡检,客户反映前几个月,CPU占用率基本在50%左右,100%的时间也很短。而从12月开始,CPU几乎在80%以上,长时间维持100%,CPU曲线图上看几乎没有波峰波谷
从客户那拿到了9-12月的STATSPACK报告,发现12月逻辑读增加很多。看了下TOP SQL,发现了猫腻,前3个月的查询时间范围为月初到月末,而12月,基本都是年初到年末。
这个系统没有用分页,而且数据量也不小,一个SQL取几十万数据是常事。
在alert日志中,发现大量的ORA-01555错误,报错时执行的时间基本都在2个小时。这些SQL也是STATSPACK中的TOP SQL
SQL对应的表上都有合适的索引,但是这些SQL都没有选择正确的索引。
观察了下,这些SQL都是from视图,而且这些视图的结构都相同,都是
select /*+rule */ * from A,B where a.a1=b.b1 and xxxxxx
union all
select /*+rule */ * from C,B where c.c1=b.b1 and xxxxxx
union all
select /*+rule */ * from C,B where c.c1=b.b1 and xxxxxx
这样的,估计这个RULE有问题,去掉测试了下,执行计划正常,以前执行2个小时不出结果的,1分钟以内能出来。
中午的时候,去掉了相关视图的RULE提示,下午观察,CPU利用率降低到60%,没有高于80%的情况,在一个可以接受的范围内。
问了下客户,他们这个系统是从8i升级上来的,估计这些RULE提示都是8i遗留下来的。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8242091/viewspace-624493/ ,如需转载,请注明出处,否则将追究法律责任。