oracle运行系统比较慢,cpu使用率高的检查和紧急处理

oracle运行系统比较慢,cpu使用率高的检查和紧急处理
      
        当运行数据库的系统资源压力比较大的时候,,系统资源利用率比较告,通过 # sar 1 5 观察系统 wio 比较高,或者 CPU idle 利用率比较低, cpu 比较忙;或者还会有内存使用率比较高,并且不断的上升;
原因是可能有一些进程占用了大量的 cpu 或者 mem 资源,长时间不能释放,累积占用资源比较高,可以如下进行检查系统情况:
查看系统中使用 mem 资源比较多的进程:
#ps -elf|awk '$10 >16000 {print  }'| sort �Crnk 10
查看系统中使用 CPU 资源比较多的进程:
# top �Cn500 �Cf top.out
可以找出分别占用 cpu mem 最多的进程,如果是 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'));
得到 session sqltext 语句:
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掉,以保证业务的正常运行;如果要了解深入的原因,可以将当时运行的语句提出出来,做进一步的分析,查看语句是否合理等等。

你可能感兴趣的:(oracle,职场,休闲)