Database/ORACLE

[스크랩] 오라클 SGA/PGA 개념 (짧은 내용)

99iberty 2014. 10. 23. 14:08

 

http://www.allsoft.co.kr/bbs/board.php?bo_table=tip_tech&wr_id=114

 

 

# SGA (System Global Area)
- 오라클 프로세스들이 접근하는 하나의 큰 공유 메모리 세그먼트
(Shared Pool, Database Buffer Cache, Redo Log Buffer, Java Pool, Large Pool)

# PGA (Program Global Area)
- 한 프로세스 혹은 스레드의 개별적인 메모리 공간으로 다른 프로세스와 스레드는 접근 불가
사용자마다 공유하지 않고 개별적으로 사용한다.



SGA (System Global Area)
- 오라클이 데이터를 읽거나 변경하기 위해 사용하는 공용 메모리 영역
- 공용 메모리 영역이므로 동일 데이터베이스에 접속하는 모든 사용자는 동일 SGA를 사용한다.
- 인스턴스가 시작될 때 시스템 메모리에서 할당 받으며 종료될 때 다시 시스템 메모리 영역으로 반환한다.


- SGA 구조
* Shared Pool
* Data Buffer
* Redo Log Buffer
* Large Pool
* Java Pool


- SGA 관리
* SGA 변경
SQL> alter system set sga_max_size = 1500M scope = spfile; (shutdown 후 재시작해야 적용됨)
SQL> alter system set sga_target = 1500M scope = both; (바로 적용가능, sga_max_size 보다 클 수 없음)

* SGA 확인
SQL> show sga
SQL> show parameter sga
SQL> select * from v$sga;
SQL> select * from v$sgastat;
SQL> select * from v$sga_dynamic_components;

 

SQL> show parameter sga
NAME TYPE VALUE
------------------------- ---------------------- ------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 610M
sga_target big integer 610M
SQL> show sga
Total System Global Area 167772160 bytes
Fixed Size 1247876 bytes
Variable Size 71304572 bytes
Database Buffers 88080384 bytes
Redo Buffers 7139328 bytes

http://wowri.tistory.com/67

 


SQL> alter system set sga_target=160M scope=both;

--> 에러가 날수 있음. 하지만 아래 명령어로 sga_target 이 설정되어있나 확인하면됨. 타겟이 설정되어있으면 됨
SQL> show parameter sga

NAME TYPE VALUE
------------------------- ---------------------- ------------------------
lock_sga boolean FALSE
pre_page_sga boolean FALSE
sga_max_size big integer 610M
sga_target big integer 160M

SQL> shutdown immediate
후 시작해보면 변경된 부분 확인가능.

 

 

 


PGA (Program Global Area)
- 서버 프로세스에 생성되며 오라클에서 사용하는 메모리 영역
- 데이터베이스에 접속하는 모든 유저에게 할당되어 각각의 서버 프로세스가 독자적으로 사용하는 오라클 메모리 영역
- 하나의 유저 프로세스에 하나의 서버 프로세스가 할당되며, 또한 하나의 서버 프로세스는 하나의 PGA를 생성한다.


- PGA 구조
* sort area : order by 또는 group by 등의 정렬을 수행하기 위한 공간이며 해당 공간에서만 정렬이 완료
된다면 이를 메모리 정렬이라고 한다. 해당 공간이 부족하면 디스크를 이용한다.
* session information : 서버 프로세스에 의해 추출된 결과 값을 전달하기 위해 필요한 유저 프로세스에
세션정보를 저장한다.
* cusor state : 해당 SQL의 parsing 정보가 저장되어 있는 주소를 저장
* stack space : SQL 문장에 bind variable을 사용했을 경우 해당 bind variable을 저장하는 공간


- PGA 관리
* 이전 오라클 버전에서는 SORT_AREA_SIZE를 설정하여 세션 별로 정해진 크기의 PGA를 할당하여
작업을 수행하였습니다. 9i, 10g 이상에서는 세션별로 정해진 PGA 크기가 아닌 PGA_AGGREGATE_TARGET Parameter에
정해진 크기 범위에서 세션 별로 자동으로 할당하여 메모리를 사용할 수 있게 되었습니다.
* 자동 PGA 조정 파라메터를 사용할 경우 주의해야할 점
(PGA_AGGREGATE_TARGET Parameter 값을 충분히 크게 설정해야한다.)


- PGA 확인
SQL> select pid, spid, username, pga_used_mem, pga_alloc_mem, pga_max_mem from v$process;

* pga_used_mem : 프로세스가 현재 사용하는 PGA 크기
* pga_alloc_mem : 프로세스에 할당된 PGA 크기 (사용 후 시스템 메모리에 반환하지 않음)
* pga_max_mem : 프로세스가 사용한 최대 PGA 크기