接到客户反馈,最近应用系统性能有所下降.
另外客户已经通过AWR报告得知,最近oracle数据库重做日志切换较以前频繁,部分时间段大约每30秒切换一次.
通过对日志文件使用LogMiner进行分析得知,充斥着大量的下列形式的语句(不同的是RowID)
update "HSCMP"."TCVSTHBODY" set "YWTYPE" = '4' where "YWTYPE" = '4' and ROWID = 'AAAUo2AAGAAAqmVAAN';
最终定位到某个存储过程,最近更新(增加)了下面一个update语句.
Update tCvsThBody Set YwType='4' Where substr(billno,1,5)='1UNTH';
这儿说一下,根据LogMiner分析的结果来看,oracle记录日志是按RowID分解后,逐行记录的,而且为了方便记录变更向量及其更新前的原值,所以看到的where条件与存储过程中语句的where条件有所不同.
将上面的语句改写了一下,如下
Update tCvsThBody Set YwType='4' Where substr(billno,1,5)='1UNTH' and YwType<>'4';
问题解决.