发现CPU占用率一般都维持在90%以上,由于大量使用FOR UPDATE,造成大量LATCH等等待现象,其中某些多线程SQL又运行非常频繁。很久以前就发现这些问题,给出相对意见,建议不采用FOR UPDATE或在FOR UPDATE上加NOWAIT,由于项目进程问题一直没进行程序修改,决定在这次解决掉,以解后顾之忧。调整前要知道如下问题1,CPU是多少MHZ
2,SERVER端的CPU是否有负荷较重3,CLIENT端的CPU是否有负荷较重4,空闲时间(如半夜)CPU使用率是否超过15%,如果超过则需要特别注意了5,CPU的PEAK LOAD
6,CPU的IDLE STATE影响CPU的因素1,高的无必要的解析会代价昂贵。发现那些SQL运行了大量的PARSE
select sql_text, parse_calls, executions from v$sqlarea order by parse_calls desc;
SYS的总的PARSE情况select name, value from v$sysstat where name = ’parse count%’;只有硬解析才能减少,可以绑定变量,或增加每一个SESSION的CACHED CURSORS。2,导致大量I/O的SQL也会明显占用CPU,如没有INDEX。BUFFER GETS一般会同CPU一块增长。可以通过v$sqlarea发现buffer_gets
3,其他等待时间,可以通过v$sesstat,v$sysstat查看#VMSTAT 5 5的CPU部分us user用