PGA와UGA Monitor
PGA(Program Global Area)는 하나의 단일 프로세스(server or background)에 대한 데이터와 제어 정보를 가지고 있는 메모리 공간 입니다. PGA는 다음과 같은 요소로 구성 됩니다.
- Stack Space
PGA는 항상 stack space를 포함하며 이곳에는 세션 변수, 배열과 같은 것들이 저장 됩니다.
- Session 정보 – (UGA)
Multi-Thread 서버 환경(Shared Server 환경)이 아닌 경우 PGA는 private SQL area등과 같은 사용자에 대한 추가적인 세션 정보를 필요로 합니다. 만약 Multi-Thread 서버 환경이라면 이러한 정보는 PGA에 위치하지 않으며 SGA의 Shared Pool에 저장 됩니다.
- Shared SQL Areas
Multi-Thread 서버의 여부와 관계없이 Shared SQL Area는 PGA가 아니라 항상 SGA의 shared memory 영역 안에 위치 합니다.
- Non-shared and Writable
PGA는 프로세스간 공유할 수 없는 영역이며 write가 가능한 영역입니다.
UGA(User Global Area)는 dedicated server 환경에서 오라클 서버에 접속한 각각의 세션에 대해 할당되는 메모리 공간으로 PGA내에 위치 합니다. 이와는 달리 Shared Server 환경(Multi-Thread 서버 환경)에서는 이러한 메모리 영역을 SGA의 Shared Pool에 저장 합니다.
아래는 PGA와 UGA의 상태를 확인 할 수 있는 SQL 문장 입니다.
SELECT
s.sid sid
, lpad(s.username,12) oracle_username
, lpad(s.osuser,9) os_username
, s.program session_program
, lpad(s.machine,8) session_machine
, (select ss.value from v$sesstat ss, v$statname sn
where ss.sid = s.sid and
sn.statistic# = ss.statistic# and
sn.name = 'session pga memory') session_pga_memory
, (select ss.value from v$sesstat ss, v$statname sn
where ss.sid = s.sid and
sn.statistic# = ss.statistic# and
sn.name = 'session pga memory max') session_pga_memory_max
, (select ss.value from v$sesstat ss, v$statname sn
where ss.sid = s.sid and
sn.statistic# = ss.statistic# and
sn.name = 'session uga memory') session_uga_memory
, (select ss.value from v$sesstat ss, v$statname sn
where ss.sid = s.sid and
sn.statistic# = ss.statistic# and
sn.name = 'session uga memory max') session_uga_memory_max
FROM
v$session s
ORDER BY session_pga_memory DESC
/