Дек 302010
 

Иногда бывает необходимо определить, что за сессия занимает много CPU или памяти (Например, по выводу prstat).

Это можно сделать запросом (в скобках - список проблемных ID процессов через запятую):

SELECT a.sid, a.serial#, b.spid, a.osuser, a.program, a.module, a.machine
FROM   v$session a, v$process b
WHERE  a.paddr = b.addr
    AND   b.spid IN (3256, 25010);

Иногда нужно решить и обратную задачу: найти UNIX pid процесса сессии (Если, например, она не убивается по каким-то причинам, такое бывает крайне редко)

SELECT b.spid
FROM   v$session a, v$process b
WHERE  a.paddr = b.addr
    AND   a.sid IN (619, 4422);

Выяснив pid таким образом, можно убить процесс, после чего pmon сам почистит сессии.

kill -9 2544

А иногда бывает полезно узнать, что делает сессия с этим pid в данный момент:

SELECT s.SID, s.SERIAL#, s.MACHINE, v.SQL_TEXT
FROM v$sql v, v$session s
WHERE s.SQL_ADDRESS=v.ADDRESS
    AND s.SID IN
        (SELECT a.sid
         FROM   v$session a, v$process b
         WHERE  a.paddr = b.addr
             AND   b.spid IN (17343,21005)
        );

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)