oracle運行系統比較慢,cpu使用率高的檢查和緊急處理

oracle運行系統比較慢,cpu使用率高的檢查和緊急處理
      
        當運行數據庫的系統資源壓力比較大的時候,,系統資源利用率比較告,通過# sar 1 5觀察系統wio比較高,或者CPU idle利用率比較低,cpu比較忙;或者還會有內存使用率比較高,並且不斷的上升;
原因是可能有一些進程佔用了大量的cpu或者mem資源,長時間不能釋放,累積佔用資源比較高,可以如下進行檢查系統情況:
查看系統中使用mem資源比較多的進程:

#ps -elf|awk '$10 >16000 {print  }'| sort –rnk 10

查看系統中使用CPU資源比較多的進程:

# top –n500 –f top.out

可以找出分別佔用cpumem最多的進程,如果是oracle的進程,其中有LOCAL=NO是我們需要關注的oracle進程,可以通過如下語句查看具體執行的是什麼語句:先要知道進程的pid號;

得到進程的sid號:
select id,serial# ,username,osuser,machine,program,process,to_char(logon_time,'yyyy/mm/dd hh24:mi:ss') logon from v$session where paddr in ( select addr from v$process where spid in('&pid'));
得到sessionsqltext語句:

select sql_text from v$sqltext_with_newlines where hash_value in (select SQL_HASH_VALUE from v$session where paddr in (select addr from v$process where spid= '&pid')) order by piece;

    或者通過如下一樣的語句輸入pid號查出:

SELECT   /*+ ORDERED */

         sql_text

    FROM v$sqltext a

   WHERE (a.hash_value, a.address) IN (

            SELECT DECODE (sql_hash_value,

                           0, prev_hash_value,

                           sql_hash_value

                          ),

                   DECODE (sql_hash_value, 0, prev_sql_addr, sql_address)

              FROM v$session b

             WHERE b.paddr = (SELECT addr

                                FROM v$process c

                               WHERE c.spid = '&pid'))

ORDER BY piece ASC

/

 然後可以分析這些sql語句,看是否是語句本身的問題,並可以通過考慮是否需要將這些語句給kill掉;
 
以上的內容主要是針對緊急處理的情況,暫時強行將使用cpu較高的進程給kill掉,以保證業務的正常運行;如果要了解深入的原因,可以將當時運行的語句提出出來,做進一步的分析,查看語句是否合理等等。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章