UGA(User Global Area)는 로그온 정보나 세션이 필요로 하는 정보를 저장하고 있는 세션 메모리이다.
UGA는 세션의 상태를 저장하고 있다.
세션이 PL/SQL 패키지를 메모리로 로드할 때,UGA는 패키지의 상태를 저장하며,
이는 특정 시점의 패키지 변수에 저장된 모든 값들이다.
패키지의 상태는 그의 서브 프로그램의 변수값과 같이 변경된다.
기본적으로 패키지 변수는 세션이 살아있는 동안 고유하며, 지속된다.
UGA는 세션이 살아있는 동안 유효해야 한다.
이 때문에, UGA는 공유 서버로 연결할 땐 PGA에 할당될 수 없다.
PGA는 하나의 프로세스만 사용할 수 있기 때문이다.
따라서 다른 서버 프로세스도 접근할 수 있게끔 SGA에 저장된다.
이때 Large Pool 이 설정됐다면 Large Pool에, 아니라면 Shared Pool에 할당된다.
전용 서버로 연결하면 UGA는 PGA에 저장된다.
CGA(Call Global Area)는 데이터베이스 콜(parse, execute, fetch)에 필요하고, 끝나면 해제되는 데이터를 담고 있다.
예를 들어, select문 실행 도중에 sort 작업이 sort_area_retained_size
를 초과하게 되면
sort에 필요한 메모리 공간이 (sort_area_size
를 초과하지 않는 선에서) CGA 내에 할당되게 된다.
execute call이 끝나면 모든 CGA와 함께 아까 추가된 sort 메모리가 반환된다.
물리적으로, CGA는 PGA의 내부 힙 공간이다.
CGA 익스턴트들은 PGA 힙 덤프에 "call heap"이라고 명시되어 있다.
재귀 호출이 있거나 한다면
PGA 힙 덤프에 하나 이상의 CGA가 있을 수도 있다.
(CGA 안에 CGA 안에 CGA ...)
Call 이 끝나면 CGA는 해제되어 PGA로 반환된다.
work area는 메모리를 많이 필요로 하는 동작들에 쓰이는 PGA 메모리이다.
예를 들어 정렬 동작에는 sort area가 사용된다.
또한 해시 조인 동작은 왼쪽 입력에서 해시 테이블을 만들어 내기 위해 hash area를 사용한다.
bitmap merge 동작은 다수의 비트맵 인덱스 스캔 결과에서 얻은 데이터를 머지하기 위해
bitmap merge area를 사용한다.