2013년 10월 31일 목요일

오라클 PGA, UGA, 프로그램 글로벌 영역(Program Global Area)/사용자 글로벌 영역(User Global Area)


오라클 PGA, UGA, 프로그램 글로벌 영역(Program Global Area)/사용자 글로벌 영역(User Global Area)


 PGA는 한 프로세스 혹은 스레드의 개별적인 메모리 공간으로 다른 프로세스 혹은 스레드는 접근 하지 못합니다. UGA는 사용자 세션과 관련된 메모리 공간 입니다. 이 공간은 MTS혹은 전용서버모드로 동작하느냐에 따라 SGA혹은 PGA에 존재 합니다.

 PGA는 일반적인 C 런타임 함수인 malloc()를 통해서 할당되고 런타임 동안 증가.감소 합니다. PGA는 오라클의 SGA내에서만 존재하고 항상 각 프로세스 혹은 스레드에 의해서 지역적으로 할당 됩니다.

 UGA는 사용자 세션의 상태를 나타내기에 사용자 세션은 항상 UGA에 접근 할 수 있어야 합니다. UGA의 위치는 오라클이 사용자 연결을 허용하는 방법에 달려 있습니다. 만약 MTS로 구성시 UGA는 누구나 접근 가능한 SGA안에 있어야 하며 전용 서버로 구성 되었다면 사용자 세션 상태에 대한 보편적인 접근에 대한 요구사항이 없어지므로 UGA는 실제 PGA와 유사하게 됩니다. 결국 UGA는 PGA에 포함되는 것입니다.그러므로 전용 서버 모드에서는 시스템 통계 정보를 보면 PGA에서 UGA의 내용을 볼 수 있습니다.

프로세스들이 공유하여 사용하는 SGA와는 달리 PGA는 개별 프로세스들이 독립적으로 사용하는 비공유 메모리 영역으로 스택과 세션 정보를 저장합니다. PGA는 각 개별 세션에 대한 바인드 변수 정보, Sort Aream  커서등의 작업을 처리 할 때 서버 프로세스를 돕습니다.  바인드 처리가 된 SQL문은 다시 파싱하지 않고 각 개별 세션에 저장된 실제 값을 바인드 변수에 대체하여 처리합니다.

 사용자의 PGA/UGA의 크기에 가장 큰 영향을 미치는 것은 init.ora 파일의 세션 수준의 변수들(SORT_AREA_SIZE, SORT_AREA_RETAIN_SIZE) 입니다. 이들 변수들은 데이터를 디스크에 기록하기 전에 정렬을 위해 사용하는 공간의 양과 그리고 정렬이 수행된 이후에 얼마나 많은 양의 메모리 세그먼트가 유지될 것인가를 관리 합니다. SORT_AREA_SIZE는 일반적으로 PGA외부에 할당 되고 SORT_AREA_RETAIN_SIZE는 UGA 내부에 있게 됩니다. 사용자는 V$(동적 성능 테이블)에 질의하여 PGA, UGA의 메모리 상태를 알 수 있습니다. 






댓글 없음:

댓글 쓰기