小记:找到占用CPU高的PL/SQL语句

    下午一个同事过来说某Linux测试服务器超级慢,严重影响工作。
    登录到服务器上使用top查看,发现oracle进程把CPU占到了100%。
   于是用了以下步骤把导致性能问题的SQL找出来:
1、使用top找到占CPU100%的ORACLE进程的pid为1234;
2、打开PL/SQL DEV,查询这个进程的信息:
SELECT   *   FROM  V$PROCESS  WHERE  spid = 1234 ;
3、找到这个进程对应的会话的信息:
SELECT  sid, program  FROM  V$SESSION s
WHERE   EXISTS ( SELECT   1   FROM  V$PROCESS  WHERE  spid = 1234   AND  ADDR  =  S.PADDR);
4、从上面已经知道是哪个客户端的哪个程序导致的了,继续:
    找到这些会话的SQL
SELECT  sql_text
FROM  V$SESSION a  LEFT   OUTER   JOIN  v$sqltext b  ON  a.sql_address = b.address
WHERE   EXISTS ( SELECT   1   FROM  V$PROCESS  WHERE  spid = 17518   AND  ADDR  =  a.PADDR)
ORDER   BY  a.SERIAL#, b.piece
5、这个语句要更好一点,根据CPU占用情况排序
SELECT  b.sql_text
FROM  V$SESSION a  LEFT   OUTER   JOIN  v$sqlarea b  ON  a.sql_address = b.address
WHERE   EXISTS ( SELECT   1   FROM  V$PROCESS  WHERE  spid = 1234   AND  ADDR  =  a.PADDR)
ORDER   BY  b.CPU_TIME  DESC


 

你可能感兴趣的:(oracle,sql,linux,工作)