PGA (Program Global Area)는 무엇인가?
SGA와 다르게 PGA는 유저별로 가지는 비 공유 메모리 영역이다. (SGA는 공유하는 메모리 영역)
그렇기에 PGA는 다른 유저의 메모리 영역을 보거나 제어할 수 없다. (아하, Private하구나~)
참고 : SGA를 'System Global Area' 라고 하는데 공유한다고 해서 'Shared Global Area' 라고도 부른다.
PGA는 'Program Global Area'라고 하는데 특성때문에 'Private Global Area' 라고도 부르기도 한다.
여기서 부른다는 건 사실.... 정의를 제안? 하는 정도에 그치기 때문에 공식적으론 System / Program이다.
(이 얘기 듣자마자 바로 이해 퐉~!... 잊혀지지도 않음.... 갓.....)
이번엔 오라클 독스에 있는 이미지를 퍼왔다.
뭔가 서버프로세스랑 반쯤 걸쳐서 같이 일을 하는가보다....
결국 세션정보를 저장할 수 있는(니가 누구니 하는 정보) 세션 메모리와
SQL Work Area와 Private SQL Area로 나뉜다.
출처 : 오라클 독스 (자세한 설명은 생략한다)
아무튼 여기서 중요하게 생각해야 하는건
PGA는 서버 프로세스 일을 도우고...
1. 세션 메모리
2. SQL Work Area
3. Private SQL Area
구성된다고 한다.
그럼 저 안을 좀 더 들어가보자. 마찬가지로 오라클 독스에서 퍼온 이미지를 보자면
출처 : 오라클 독스 (자세한 설명은 생략한다)
1. 세션 메모리
사용자가 데이터베이스에 연결할 때 사용자에 대한 세션정보를 작성한다. (당연한 얘기지만...)
(세션 변수, 로그인 정보, 세션 상태 등)
여기에 아무튼 메모리가 올라가는건 데이터베이스에 연결할 때 올라가기 때문에
데이터베이스를 사용하지 않으면 메모리를 해제해줘야 한다.
(Java 하시는 분들은 다들 아시겠죠? 연결을 하고 사용 후에는 항상 닫아주는거... )
2. Private SQL Area
Persistent Area (구글번역기 : 영구 영역) 와 Runtime Area (구글번역기 : 런타임 영역)
Presistent Area 에는 바인드 변수가 저장된다.
Runtime Area 에는 실행 상태 정보와 Query의 데이터를 임시저장한다.
실행 상태 정보? 테이블을 읽고 있는지... 어디까지 읽었는지... 다 읽었는지....
Query의 데이터? 처리 결과 레코드가 20개라 가정하면 레코드를 1개 찾을때마다 임시저장했다가 한꺼번에 출력.
3. SQL Work Area
SQL 작업 공간이라고 하는데 이 부분이 참 모호한 정의들이 많다.
자세하게 어떤식으로 working 하는지 명시가 안되어 있기에....
주로 하는 일은 정렬, 그룹화, 병합 등이라고 한다.
즉, 데이터를 조작하는데 사용되는 영역이다고 보면 된다.
기본적으로 데이터는 메모리 순서에 따라 읽혀진다.
이 말은 내가 원하는 방식대로 정렬을 명령하지 않는 이상 메모리에 정렬된 순서대로 읽어 온다는 것이다.
그렇기에 정렬 작업을 한다면 이 영역을 사용하게 된다.
데이터 그룹화, 병합 작업도 마찬가지이다. 데이터를 읽어 온 후에 조인을 하던, 비트맵 병합 및 비트맵 만들기 작업을 수행하는데는 SQL Work Area 에서 수행된다는 것을 알고 있자.
(어떻게 하는지는 모른다.... 난 어떤 작업을 수행하는지 까지만 이해하고 넘어갈 것이다.)
이렇게 PGA 내부 영역별 수행작업 혹은 기능들을 알아봤다.
정리하면
PGA에는 세션 메모리, Private SQL Area, SQL Work Area, 그리고 Cursors Area가 있다.
(Cursors Area는 따로 설명을 안했지만 커서 정보를 저장하는 영역이다)
세션 메모리는 세션 정보....
프라이빗은 바인드 변수와 실행 상태 정보, Query 데이터 임시 저장
Work 영역은 정렬, 병합 등 데이터 조작 정보 영역
PGA는 크기가 중요하다고 한다.
PGA에 적은 메모리를 할당하면 성능 저하로 이어진다.
PGA에 큰 메모리를 할당하면 특히 세션의 성능이 크게 향상된다.
하지만 일부 세션은 적은 메모리가 필요하기도 큰 메모리가 필요할 수도 있기 때문에 직접 크기를 지정할 때는 해당 지식에 대해 이해가 필요합니다. (오라클이 자동으로 변경하도록 설정할 수도 있습니다)
'Certification > SQLP' 카테고리의 다른 글
오라클 SIMPLE_CASE_EXPRESSION vs SEARCHED_CASE_EXPRESSION (0) | 2019.02.25 |
---|---|
오라클 DROP, TRUNCATE, DELETE 비교 (0) | 2019.02.25 |
오라클 데이터 블록(Oracle Data Block) (0) | 2019.02.13 |
옵티마이저 힌트 사용법 (0) | 2019.02.09 |
데이터베이스와 테이블 (0) | 2019.02.07 |