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  그런 쿼리가 없는데도 계속 증가한다면 버그일 가능성이 크다.

Posted by Any DB
,