下午一个同事过来说某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







