PGA란?
데이터베이스에 접속하는 모든 유저에게 할당되는 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리 영역
PGA의 구조
- 정렬공간 (Sort Area) : Order By 또는 Group By 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이
완료된다면 이를 메모리 정렬이라 한다. 해당 정렬 메모리 공간이 부족하다면 디스크를 이용하게 된다.
- 세션정보 (Session Information) : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스
의 세션 정보를 저장한다.
- 커서상태정보(Cursor State) : 해당 SQL의 Parsing 정보가 저장되어 있는 주소를 저장한다.
- 변수저장정보(Stack Space) : SQL문장에 Bind Variable를 사용했을 경우 해당 바인드 변수를 저장하는 공간이다.
* PGA는 유저 프로세스가 요정항 작업을 수행하기 위해서 필요한 영역으로 구성된다. 하나의 유저 프로세스에 하나의 서버 프로세스가 할당되며, 또한 하나의 서버프로세스는 하나의 PGA를 생성하게 된다.
PGA 관리
- WORKAREA_SIZE_POLICY : MANUAL과 AUTO로 설정 가능
AUTO 설정시 PGA_AGGREGATE_TARGET 파라미터를 이용하여 PGA의 크기를 설정하겠다는 뜻. (Default)
MANUAL설정시 SORT_AREA_SIZE 파라미터를 이용하여 정렬 공간을 설정하겠다는 뜻.
- SORT_AREA_SIZE : 정렬 공간에 대한 크기를 설정하는 파라미터
- PGA_AGGREGATE_TARGET : 모든 세션의 PGA 크기의 합을 설정하는 파라미터이며,
PGA_AGGREGATE_TARGET 파라미터에서 지정한 크기까지 오라클이 PGA를 자동으로 관리한다.
* 정렬 작업의 양이 많아 더 큰 PGA를 요구한다면 PGA_AGGREGATE_TARGET 파라미터에 정해진 크기 내에서 원하는 만큼 할당 가능
* Oracle Process가 메모리를 많이 잡아 먹고 있을경우
Oracle Process가 사용하는 메모리는 SGA+PGA의 합계라고 보면 된다.
SGA는 DB 기동시 고정된 값으로 올라오지만, PGA의 경우 세션의 활동에 따라 가변적이다
대용량 Hash join을 하거나 정렬 작업을 하면 PGA 사용이 증가될 수 밖에 없고,
그 결과 Oracle Process 사용 메모리가 늘어난다.
그리고 PGA_AGGREGATE_TARGET의 경우는 limit라기 보다는 희망 목표(?)에 가깝기 때문에 일시적으로 넘어서
증가할 수도 있다.
일단 세션의 SQL 활동을 모니터링해본다. . 대용량 조인이나 정렬을 하는 쿼리가 있는지 확인한다.
select * from v$sort_usage 그런 쿼리가 없는데도 계속 증가한다면 버그일 가능성이 크다.
'Oracle > Admin' 카테고리의 다른 글
Oracle11g (11.1.0.7.0) 부터 deprecate된 parameters (0) | 2013.08.23 |
---|---|
자동 sql 실행 메모리에 대해 (0) | 2013.08.02 |
11g 대소문자 구분 (0) | 2013.08.02 |
Client에서 sys,system 계정으로 Oracle 서버 접속시 명령어. (0) | 2013.08.02 |
Data Pump 사용방법 (0) | 2013.08.02 |