기술자료

DBMS, DB 구축 절차, 빅데이터 기술 칼럼, 사례연구 및 세미나 자료를 소개합니다.

오라클 데이터 메모리의 핵심 : PGA 이해를 위한 첫 걸음

기술자료
DBMS별 분류
Oracle
작성자
dataonair
작성일
2014-01-24 00:00
조회
16105



오라클 데이터 메모리의 핵심

PGA 이해를 위한 첫 걸음


오라클 데이터베이스 메모리 영역의 중요한 요소 중 하나가 바로 PGA(Program Global Area)다. 흔히 쉽게 인지하고 넘어가는 경향이 있지만, 제대로 된 튜닝값을 설정하지 못하고 데이터베이스를 구축해 운영할 경우 재난 수준의 장애를 겪을 수도 있다. 이에 필자가 겪었던 시행착오와 그 과정에서 배운 지식 및 경험들을 상세히 소개하겠다.



이번 시간에는 PGA의 개념부터 이해하고 그와 관련 있는 지표들을 통해 어떤 방식으로 작동하는지를 다루겠다.



PGA의 개념


PGA는 Program Global Area의 약자로, 단어가 가진 의미 그대로 공유되지 않고 혼자서만 사용하는 공간이다. 그래서 Private Global Area라고 불리기도 한다. 좀더 자세히 설명하면, PGA는 프로세스에 대한 데이터와 제어정보가 포함된 비 공유 메모리 영역으로 서버 프로세스가 시작될 때 생성되며, 데이터베이스에 접속하는 모든 사용자에게 할당된 각각의 서버 프로세스가 독자적으로 사용하는 오라클 데이터베이스의 메모리 공간이다.

PGA는 서버 프로세스가 시작될 때 오라클 데이터베이스에 의해 생성되며 프로세스가 종료될 때 해제된다. PGA는 SQL들의 작업공간이기 때문에 정렬 작업을 할 때 주로 사용된다. 따라서 SQL 정렬 작업을 위해 PGA 메모리 영역을 사용할 경우, PGA 크기 내에서 정렬이 일어나면 메모리 내에서 정렬되는 것이므로 수행속도가 빠르고 PGA 크기를 초과하면 디스크에서 정렬이 일어나므로 수행속도가 느려지게 된다.



tech_img946.jpg

PGA의 구조


유저 프로세스가 리스너를 통해 서버 프로세스를 호출하면 서버 프로세스가 PGA 공간을 할당해 SQL 작업공간을 생성한다. 이렇게 생성된 PGA 공간을 가지고 주로 SQL의 정렬 작업이 수행되며 SGA(System Global Area)와 데이터를 주고받으면서 작업이 이뤄진다. PGA 영역은 크게 UGA(User Global Area)와 Stack Space로 구성되는데 그 구조는 <그림 1>과 같다.

PGA를 구성하는 UGA와 Stack Space는 각각의 고유한 기능과 역할을 수행하게 되는데 이에 대한 자세한 내용은 다음과 같다. 참고로 PGA는 모드 구성에 따라 저장 위치가 다르다.

● User Session Data
추출된 결과 값을 전달하기 위해 유저 프로세스의 세션 정보를 저장한다. 그리고 SQL문 결과를 유저 프로세스에게 전달하고자 유저 세션 주소를 저장하고 있다.

● Cursor State
해당 SQL의 파싱 정보가 기록되어 있는 주소를 저장한다. 실행한 SQL문의 위치다.

● Sort Area
정렬할 때 사용하는 공간이다. SQL의 작업 공간이며 가장 많은 공간을 할당해야 한다.

● Stack Space
SQL문장에 Bind 변수를 사용할 때 이를 저장하는 공간이다.

● Dedicated Server
User Session Data, Cursor State, Sort Area 영역을 직접 PGA 공간에 저장한다.

● Shared Server
User Session Data 영역을 SGA에 저장한다.



서버별 PGA 구성방식


PGA의 모드 구성방식은 크게 두 가지로 구분된다. 하나는 전용 서버(Dedicated Server) 방식이고 다른 하나는 공유 서버(Shared Server) 방식이다. 이 두 가지 설정방식에 따라 PGA의 저장영역이 달라진다.

우선 전용 서버는 유저 프로세스와 서버 프로세스 간 1:1 관계로 구성되며 서버 프로세스 하나당 PGA 영역을 하나씩 갖게 된다. 그리고 UGA 공간은 PGA로 할당된 영역에 위치하며 유저 프로세스의 세션정보를 PGA가 가지고 있다. 반면 공유 서버는 PGA 정보 일부가 SGA의 UGA 공간에 저장되는 방식으로, 유저 프로세스와 서버 프로세스간의 관계가 N:1로 구성된다. 공유 서버의 경우 유저 프로세스의 주소 정보를 한 개의 서버 프로세스가 가질 수 없기 때문에 SGA가 가지고 있다. SGA 내에서 UGA는 Large Pool 미 설정 시 Shared Pool에 위치하게 된다.



tech_img947.jpg

tech_img948.jpg

PGA의 메모리 크기 관리


오라클 9i부터 PGA 메모리 영역 크기는 AUTO와 MANUAL이란 두 가지 방법으로 관리되기 시작했다. AUTO로 관리한다면 PGA_AGGREGATE_TARGET 파라미터를 설정해야 하고, MANUAL로 관리한다면 *_AREA_SIZE 파라미터 값을 설정해야 한다.

● MANUAL(SORT_AREA_SIZE)

9i 이전 버전에서는 SORT_AREA_SIZE를 설정해 각 서버 프로세스별로 동일한 크기의 PGA를 할당해 사용했다. 이는 관리가 간단해질 수 있지만 메모리 사용이 비효율적일 수 있다. 간단하게 예를 들면, SORT_AREA_SIZE가 50MB일 때 100MB의 공간이 필요한 정렬작업이 추가된다면 50MB 만큼의 디스크 I/O가 발생할 수 있다.
● AUTO(PGA_AGGREGATE_TARGET)

PGA_AGGREGATE_TARGET 크기 내의 가용 메모리 안에서 PGA 크기가 자동으로 조정된다. 만약 크기를 정하지 않으면 10MB와 SGA 크기의 20% 중 큰 값으로 설정된다. 예를 들면, PGA_AGGREGATE_TARGET이 100MB일 때 10MB를 사용 중인 프로세스가 2개 있다면 현재 가용할 수 있는 메모리의 양은 80MB가 된다.

tech_img949.jpg

tech_img950.jpg

PGA의 관리 정책을 MANUAL로 세팅해 운용할 경우 동일한 크기의 메모리 공간이 할당되기 때문에 가변적으로 크기가 할당되는 AUTO 방식보다 상대적으로 비효율적일 수 있다. 왜냐하면 사용자 요청이 없으면 메모리 효율이 낮아지기 때문이다.

하지만 자동관리 방식이 항상 좋은 것은 아니다. 하나의 세션이 사용할 수 있는 PGA의 용량이 정해져 있기 때문에 대량의 데이터를 처리해야 하는 배치성 작업에서는 문제가 될 수도 있다.
이렇게 대량의 정렬이나 해시가 발생하는 경우, WORKA REA_SIZE_POLICY 값을 MANUAL로 설정한 후에 SORT _AREA_SIZE나 HASH_AREA_SIZE 값을 수동으로 정해주면 성능 향상에 도움이 된다. 결국 각각의 환경에 맞게 운용하는 것이 바람직하다.



PGA의 메모리 관리 메커니즘


PGA의 메모리 관리는 SQL Memory Mana ger라고 불리는 Feedback Loop Mechanism에 기반을 두고 관리된다. <그림 5>는 SQL Memory Manager가 동작하는 내부 메모리 구조를 나타낸 것이다.

SQL의 정렬 작업이 수행될 때 서버 프로세스에 있는 Local SQL Memory Manager(Local SMM)가 이 작업에 대한 메타데이터 정보를 Work Area Profile(WP1)에 기록한다. 활동 중인 Work Area Profile들의 그룹은 SGA 내에 있는 Local Memory Manager에 의해 관리된다.

우측에 있는 Global SQL Memory Manager (Global SMM)는 CKPT 백그라운드 프로세스에 의해 3초에 한 번씩 실행되는 데 두 가지 역할을 수행한다. 첫 번째 기능은 AUTO 모드로 관리되는 SQL 작업 영역에 대해 PGA Memory 크기를 연산하는 것이고, 두 번째 기능은 전체 PGA Memory 경계값을 수시로 계산해 각각의 SQL 작업 영역의 크기를 제한하는 것이다. 이러한 Feedback loop 작업은 Local Memory Manager에 의해 마감되며, 할당된 메모리를 운영체제로 자원을 반환시키는 역할도 함께 수행한다.



정리하며


지금까지 PGA의 개념과 구조 그리고 관리방식에 대해 알아보고 PGA 메모리 관리에 대한 오라클 내부 메커니즘을 상세하게 살펴봤다. 개념적인 설명이 많아 다소 딱딱하게 보일 수 있으나, 기초적인 지식이 필요하기 때문에 용어 설명에 중점을 두고 설명했다. 다음 시간에는 실제 진단사례를 통해 PGA에 대한 실전 노하우를 쌓을 수 있도록 진행하겠다.