PGA(Program Global Area) 관리
PGA는 오라클 서버 프로세스에 의해 생성되며 DB에 접속하는 모든 사용자에게 할당되는 오라클 메모리 영역인데 아래에서 이 영역을 관리하는 방법에 대해 알아 보겠습니다.
우선 PGA를 구성하는 영역에 대해 알아보면… Sort Area(Order Bu, Group By의 경우에 사용), Session Information(서버 프로세스에 의해 추출된 결과값을 클라이언트의 사용자 프로세스에 전달하기 위해 필요한 사용자 프로세스의 정보 저장), Cursor State(SQL의 파싱 정보 저장), Stack Space(Bind 변수를 저장)로 구성되는데 이를 관리하기 위해서는
다음과 같은 파라미터의 설정이 필요 합니다.
WORKAREA_SIZE_POLICY : manual 또는 auto의 값이 들어올 수 있는데 auto인 경우 PGA_AGGREGATE_TARGET 파라미터를 이용하여 PGA 크기를 설정하겠다는 의미이며 manual인 경우 SORT_AREA_SIZE 설정을 통해 소트 영역을 설정하겠다는 의미 입니다.
SORT_AREA_SIZE : 정렬을 위한 공간을 설정
PGA_AGGREGATE_TARGET : 모든 사용자 세션이 사용할 총 PGA 크기를 지정. 즉 이 크기만큼 모든 사용자 세션이 사용할 수 있으며 이는 오라클서버에서 자동으로 관리 됩니다.
이전 오라클 버전에서는 SORT_AREA_SIZE 크기를 설정하여 세션별로 지정된 크기의 PGA를 할당하였는데 9i 및 10g에서는 세션별로 정해진 PGA의 크기가 아닌 전체 세션에 할당될 총 PGA SIZE를 PGA_AGGREGATE_TARGET을 통해 설정하게 되어 있는것이죠…
DB에 한 사용자가 접속하였고 이때 SORT_AREA_SIZE는 10M 였다고 가정할 때 사용자가 50M되는 테이블을 정렬한다고 할 때 WORKAREA_SIZE_POLICY가 manual인 경우라면 SORT_AREA_SIZE 10M를 넘어서는 경우이므로 TEMP Tablespace를 사용하여 정렬을 하게 될 겁니다(SORT가 메모리에서 일어나면 좋지만 공간이 부족하여 디스크에서 일어난다면 성능에 문제가 있을 수 있습니다). 이 경우엔 5번정도 DISK IO가 일어나므로 성능에 영향을 줄 수가 있겠죠… 그런데 WORKAREA_SIZE_POLICY를 auto로 설정하고 PGA_AGGREGATE_TARGET 파라미터를 최소 50M 이상 준다면 DISK IO 없이 충분히 메모리 SORT가 가능할 겁니다. 물론 여러 사용자가 있으니 PGA_AGGREGATE_TARGET의 크기는 충분히 고려되어야 할겁니다.
평상 시 사용되는 PGA의 크기는 v$session을 통해 조회할 수 있는데 간단히 보시면 PGA_USE_MEM을 통해 프로세스에서 현재 사용되는 PGA 크기를 알수 있으며 PGA_ALLOC_MEM 컬럼을 통해 프로세스에 할당된 PGA 크기, PGA_MAX_MEM 컬럼을 통해 프로세스가 사용한 최대 메모리 사용량을 알 수 있습니다.
감사합니다.
[출처] [Oracle강좌] PGA(Program Global Area) 관리 |작성자 오라클러
'ORACLE > TUNING' 카테고리의 다른 글
Sort Area 크기 조정 (0) | 2012.09.07 |
---|---|
SORT와 PGA_AGGREGATE_TARGET (0) | 2012.09.06 |
Latch: cache buffers chains (0) | 2012.09.06 |
Oracle Wait Event 모니터링 (0) | 2012.05.02 |
Chapter 9 Tuning Buffer Cache (0) | 2012.05.02 |