버전 비교

  • 이 줄이 추가되었습니다.
  • 이 줄이 삭제되었습니다.
  • 서식이 변경되었습니다.

...

9i R1을 넘어가면서 부터, PGA 메모리를 자동화할 수 있는 방법들이 소개되기 시작했다. 

수동으로 PGA를 설정하던 시절에는 - 직접 파라미터를 설정해야 하기에 불편했고, 어디를 기준으로 맞추어야할 지도 애매했고, 동시에 발생하는 정렬 작업의 수치를 잘못 산정하여 어느 순간에는 메모리 사용량이 급격히늘어나거나 하는 문제가 생길 수도 있었다.
자동으로 넘어가며 - 이러한 불편함을 해소하며, 정렬이 없는 세션들에서 낭비하는 메모리를 최소화하고, 또 큰 정렬 작업을 발생시키는세션에서는 더 큰 메모리를 할당 받을 수 있는 등 메모리 활용도를 높힐 수 있게 되었다. 

자동 PGA 메모리 관리와 관련된 파라미터는 아래와 같다.

   WORKAREA_SIZE_POLICY : AUTO 혹은 MANUAL로 설정 가능하다. 이 파라미터를 AUTO로 설정할 경우 정렬공간 해시공간등과 관련된 파라미터를 자동으로 조정하며 동작한다. 
   PGA_AGGREGATE_TARGET : PGA 메모리 영역의 총합으로 사용할 메모리 사이즈를 지정해준다.
                                          sort_area_size, hash_area_size, bitmap_merge_size, create_bitmap_area_size와 같은 모든 작업 영역의 통합 사이즈를 몇으로 지정할지에 대한 값으로, 
                                          9i R1에서 처음 등장하였으며, 9i 시절엔 dedicated 서버 방식일 경우에만 동작했으나, 10g 시절로 넘어오며 shared 서버 방식에서도 동작하고 있다. 

"WORKAREA_SIZE_POLICY=AUTO / PGA_AGGREGATE_TARGET  = 0이 아닌 값"을 넣어주면 자동 PGA 메모리 관리 기능이 활성화된다. 

...

자동으로 메모리를 할당하는 방식은, 그 동작 방식에 대하여 제공되는 문서화된 내용이 없을 뿐더러, 버전에따라 계속 변경되어 왔고, 앞으로도 변경되어갈 것이며, 사용자가 직접 제어하기 어려운 부분들 뿐이다.
그렇다보니 정확한 동작 방식을 알아보기에는 어려움이 있지만 메타링크 문서 147806.1번을 223730.1399497.1번 등을을 확인해 보면 그 동작 방식에 대하여 어느정도의 힌트를 얻을 수 있다. 

  • PGA_AGGREGATE_TARGET 값은 전체 PGA 영역 사이즈에 관여한다. 이 값은 PGA 영역으로 사용할 최대의 크기를 뜻한다. 미리 메모리를 할당해 두지는 않으며, 최대 이 값까지 올라갈 수 있다는 것이다. 허나 이 값은 어디까지나 target이기에 어느 순간에 PGA 종량이 해당 값 이상으로 증가할 수도 있다.
  • PGA_AGGREGATE_TARGET 값은 개별 workarea의 사이즈에도 관여한다. 싱글 오퍼레이션은 PGA_AGGREGATE_TARGET의 5%정도까지, 패러럴 오퍼레이션은 30% 정도까지 메모리를 사용할 수 있다.
    이 리미트 값은 각각의 workarea 들에 대한 크기를 뜻하는 것으로, 하나의 세션에서 여러개의 쿼리를 수행할 수도 있고, 하나의 쿼리에서 여러번 해쉬가 일어나 hash area가 여러개 필요할 수도 있는 등, 하나의 세션을 기준으로 보면 5%와 30%를 넘어설 수 있다.
  • PGA_AGGREGATE_TARGET 값 내에서 자율조정되는 영역은 어디까지나 각 SQL Workarea들 뿐이다. (세션정보나, 커서정보가 저장되는 공간, PL/SQL에서 사용하는 공간 등) 그 외의 PGA 영역들에 대해서는 자동으로 조정되지 않는다. 
  • 즉 PGA_AGGREGATE_TARGET을 설정하면, "PGA_AGGREGATE_TARGET 값"에서 "조정 불가능한 공간의 크기를 제외한 만큼" 내에서 능동적으로 SQL Workarea들을 조정하며 동작하게 된다.
  • 해당 파라미터는 비용 기반의 옵티마이저 동작에도 영향을 미친다. 정렬,해쉬조인,비트맵 동작등에 사용할 수 있는 최소/최대 메모리 값을 계산하여 플랜을 선정하는데 이용한다. 

 

PGA_AGGREGATE_TARGET을 사용한 메모리 제어

ㅁㄶㅁㄶㅁㄶ오라클은 PGA_AGGREGATE_TARGET값을 넘지 않고 운영할 수 있도록 노력하지만, 상황에 따라서 더 큰 PGA 값이 요구될 때에는, 작업을 취소하는 것이 아니라 PGA의 사이즈를 더 키우는 쪽을 선택한다. 

 

수동/자동 메모리 관리기법의 선택

일반적으로 그냥 자동 관리 기법을 사용하는 편이 좋다. 
굉장히 특수한 상황, 책에서의 예제 대로면, 하루종일 한가지 작업만 수행된다던지, 특정 작업 한개만 매우크고 중요하다던지.. 그럴 때에만 특별히 alter session을 통해 수동으로 변경하고 작업하기를 추천한다. 


PGA와 UGA 요약

...

  • PGA는 특정 프로세스의 전용

...

  • 공간. 서버 프로세스가 개별 세션마다 독립적으로 보관해야할 다양한 값들을 저장하는데 사용.
  • PGA 및 UGA는 heap 형태의 메모리 구조.
  • dedicated 서버 방식 사용시 UGA는 PGA안에 위치 / shared 서버 방식 사용시 SGA안에 위치.