下午一个同事过来说某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
登录到服务器上使用top查看,发现oracle进程把CPU占到了100%。
于是用了以下步骤把导致性能问题的SQL找出来:
1、使用top找到占CPU100%的ORACLE进程的pid为1234;
2、打开PL/SQL DEV,查询这个进程的信息:



找到这些会话的SQL







