PGA <-> SGA는 프로세스들이 공유하여 사용할 수 있는 공유 메모리 )
PGA는 서버 프로세스가 시작할 때 Oracle에 의해 생성된다. PGA의 총 크기는 Oracle Instance에 속한 각 프로세스에 의해 할당된다.
PGA는 개별 세션에 대한 바인드 변수 (Bind Variable) 정보, SORT AREA, 커서(CURSOR) 처리 등의 작업을 할 때 서버 프로세스를 돕는 역할을 한다.
1. 바인드 변수(Bind Variable)
다음의 예를 보자.
select emp_id from emp where department = ‘10’;
select emp_id from emp where department = ‘20’;
department code값이 다르기 때문에 Parsing이 두 번 발생한다. 이를 동일하게 하기 위해 상수값을 바인드 변수로 변환한다면, SQL문이 재사용되어 한 번만 Parsing되므로 성능이 향상된다.
2. SORT_AREA
정렬이 필요한 작업은 SORT_AREA를 사용하여 정렬 작업의 속도를 향상시킨다. 만약 처리되어야 할 데이터 양이 SORT_AREA보다 크면 정렬 대상이 되는 데이터는 보다 작은 조각으로 나누어진다. 이렇게 나누어진 데이터 조각들은 메모리에서 처리되는 것이 가능하며, 후에 처리될 남은 조각들은 임시 데이터 영역에 저장된다.
SORT_AREA는 제어되며 조율되어 일반적으로 대용량의 데이터베이스에서 높은 메모리 소비 비용을 요구하는 특정 작업에 대한 성능을 향상 시킨다.
3. 커서 처리
어플리케이션 개발자는 프로그램의 실행을 통해 명시적으로 커서를 열거나 Private SQL 영역을 사용할 수 있다. 즉 Private SQL 영역의 할당과 반납은 User Process와 관련이 있다.
User Process가 할당할 수 있는 Private SQL 영역은 초기화 파라미터 OPEN_CURSORS에 의해 제한되며 기본값은 50이다.
다음과 같이 질의 하여 설정된 파라미터 OPEN_CURSOR의 값을 확인할 수 있다.
CONN system
SHOW PARAMETER OPEN_CURSOR
Private SQL 영역은 CURSOR가 닫혀질 때까지 존재한다. 애플리케이션 개발자는 명시적으로 커서를 선언한 뒤 사용하지 않은 모든 열린 커서를 닫음으로써 메모리의 사용량을 최소화해야 한다.