Oracle

게시글 보기
작성자 유건데이타 등록일 2015-08-14
제목 특정 PROCESS의 작업을 유보시키는 방법
특정 PROCESS의 작업을 유보시키는 방법
=====================================

다음은 CPU 를 심각하게 소모하게 되어 제대로 작업을 하지 못하게 되는
경우 특정 CPU를 소진하고 있는 process의 작업을 잠시 정지 시켜주는
방법입니다. 단, 이 process에 대한 memory나 lock등은 그대로 점유를
하게 되므로 lock에 대한 주의가 필요하며 MTS session의 경우 동일한
dispatcher에 대한 다른 session까지 영향을 미치게 되니 dedicated server
process에 대해서만 작업을 하시기 바랍니다.

먼저 OS상에서 CPU 사용이 많은 session에 대한 PID 나 SPID를 확인한후
아래의 조회로 session의 PID을 확인합니다.

SELECT p.pid, p.spid , s.sid, b.name, s.username, s.osuser,
s.machine, s.terminal, s.program
FROM v$session s, v$process p, v$bgprocess b
WHERE p.addr = s.paddr and
p.addr = b.paddr(+)
ORDER BY s.sid

PID SPID SID NAME USERNAME
-------- --------- --------- ----- -------------------
2 0006A 1 PMON
3 0006B 2 DBW0
4 00093 3 ARCH
5 0012E 4 LGWR
6 000F6 5 CKPT
7 00121 6 SMON
8 00135 7 RECO
9 00083 8 SNP0
10 00101 9 SNP1
11 0005A 10 QMN0
12 00116 11 SCOTT
13 00140 12 TEST
14 00147 14 ANOTHER_USER

예를 들어 session 12가 batch성 작업을 하고 있어 resource를 많이
소모하고 있다고 하면 SID 12에 대한 PID는 14입니다.

SID = 12
PID = 14

SVRMGR> connect internal
connected
SVRMGR> oradebug setorapid 14
pid: 147
SVRMGR> oradebug suspend
Statement Processed

이제 PID 14는 CPU 사용율이 떨어질 것이나 여전히 'alive' 로 남아 있게
되며 단지 작업을 중단하고 있는 상태입니다.

이 session에 대한 wait event는 'debugger command'를 갖게 됩니다.

SQL> select sid, seq#, event from v$session_wait;

SID SEQ# EVENT
--------- --------- -------------------
12 65 debugger command

이 session의 작업을 재개하려면 다음의 절차에 의하여 가능합니다.

SVRMGR> oradebug setorapid 14
pid: 147
SVRMGR> oradebug resume
statement processed
Comment
등록된 코멘트가 없습니다.