应用通知有个应用很慢,于是查原因
下面是AWR的采样时间:
从AWR可以看到该语句30分钟内,这两条应用反应慢的语句的执行次数分别在930万次和950万次,这个跟应用的反映差了一个数量级:
但是应用反映,实际上在应用中实际设置的加载量是10分钟25万次。
这就很奇怪了,首先用logminer随机抽查了10分钟的归档,并挖掘了数据:
SYS@ LUNARDB> exec dbms_logmnr.add_logfile (logfilename =>'/lunar_data/arch/1_28754_856327844.dbf', options =>dbms_logmnr.new)LUNARDB PL/SQL procedure successfully completed. SYS@ LUNARDB> exec dbms_logmnr.add_logfile (logfilename =>'/lunar_data/arch/1_28755_856327844.dbf', options =>dbms_logmnr.ADDFILE)LUNARDB PL/SQL procedure successfully completed. SYS@ LUNARDB> exec dbms_logmnr.add_logfile (logfilename =>'/lunar_data/arch/1_28756_856327844.dbf', options =>dbms_logmnr.ADDFILE)LUNARDB PL/SQL procedure successfully completed. Elapsed: 00:00:00.04 SYS@ LUNARDB> EXEC SYS.DBMS_LOGMNR.START_LOGMNR(StartScn => 6214773543477,endScn => 6214774035996,OPTIONS => SYS.DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG)LUNARDB PL/SQL procedure successfully completed. Elapsed: 00:00:00.01 SYS@ LUNARDB>
根据Logminer的挖掘的结果,发现实际执行次数跟应用反馈的执行次数差不多,跟AWR的数据相差大概10倍:
SYS@ LUNARDB> create table USR_LUNARDB.LGMC_20141113_BAK tablespace PART_DATA as select * from v$logmnr_contents Table created. SYS@ LUNARDB> ---AWR: 4kaxn5926cz5f SYS@ LUNARDB> select count(*) from USR_LUNARDB.LGMC_20141113_BAK where sql_redo LIKE 'update %BALANCE_TAB%' COUNT(*) ---------- 228333 ---AWR: 5kfrvbw8hx2dv SYS@ LUNARDB> select count(*) from USR_LUNARDB.LGMC_20141113_BAK where sql_redo LIKE 'insert %BALANCE_TAB%' COUNT(*) ---------- 205244 SYS@ LUNARDB>
再查一下其他语句:
select count(*) from USR_LUNARDB.LGMC_20141113_BAK where sql_redo LIKE 'update %BALANCE_TAB%'; COUNT(*) ---------- 97392
检查awr发现,该语句的执行次数基本跟吻合。
这里也就是说,部分语句执行次数相差10倍,但是部分语句的执行次数又是正常的,奇葩!
检查share pool,发现大量sql异常LUNARDB
这里的sql信息感觉严重失真,貌似重复了很多,也就是应该purge的sql在V$SQL中没有被更新,而是越积越多……
重启服务器后,恢复正常,目前还没有找到具体的bug信息。