티스토리 뷰
SMALL


- Oracle의 인스턴스에 대한 데이터와 컨트롤 정보를 가지는 공유 메모리 영역의 집합 (SGA는 동적이다.)
(Oracle이 상주하는 컴퓨터의 가상메모리에 할당)
SQL> show sga; <- SGA 메모리 할당 상태 확인
Total System Global Area 285212672 bytes
Fixed Size 1218992 bytes
Variable Size 75499088 bytes
Database Buffers 205520896 bytes
Redo Buffers 2973696 bytes
Fixed Size 1218992 bytes
Variable Size 75499088 bytes
Database Buffers 205520896 bytes
Redo Buffers 2973696 bytes
- Oracle9i부터 동적SGA는 인스턴스를 종료하지 않고 SGA 구성을 변경할 수 있다.
- SGA_MAX_SIZE 파라미터로 크기를 조정한다.
+ SGA 구성 요소를 통해 Granule에 할당되고 추적된다.
- Granule : 연속적인 가상 메모리 할당 단위. Granule의 크기는 예상되는 총 SGA 크기에 따라 다르다.
(예상 SGA 크기가 128M보다 작은 경우에는 4M, 그 외에는 16M)
- Database Buffer Cache 및 Shared Pool은 Granule 단위에 따라 늘어나거나 줄어든다.
- Database buffer cache, Redo log buffer, Shared pool, Large pool, Java pool, Streams pool 로 구성
+ SGA 크기에 가장 많은 영향을 주는 파라미터?
- DB_CACHE_SIZE : 표준 블록의 캐시 크기 (기본값은 UNIX: 48M, NT: 52M)
- LOG_BUFFER : Redo log buffer에 할당되는 바이트 수
- SHARED_POOL_SIZE : 공유 SQL 및 PL/SQL에 제공되는 영역의 바이트 크기 (기본적으로 16M, 64bit인 경우는 64M)
- LARGE_POOL_SIZE : 대용량 풀의 크기 (기본값은 0)
- JAVA_POOL_SIZE : Java 풀의 크기 (기본값은 24M)
* SGA의 크기는 (SGA_MAX_SIZE) - (DB_CACHE_SIZE) - (LOG_BUFFER) - (SHARED_POOL_SIZE)
- (LARGE_POOL_SIZE) - (JAVA_POOL_SIZE)를 초과할 수 없다.
1. 공유 풀 (Shared Pool)
- 가장 최근에 실행한 SQL문이나 데이터 정의를 저장하는데 사용된다.
- Library Cache와 Data Dictionary Cache로 구성된다.
- 전체 SGA 킈는 SGA_MAX_SIZE를 초과할 수 없다.
- Shared_Pool_Size 파라미터 값으로 크기를 조정한다.
SQL> show parameter shared_pool_size; <-- shared_pool_size 값 확인
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 0
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 0
SQL> alter system set shared_pool_size = 64m; <-- shared_pool_size 값 변경
System altered.
System altered.
SQL> show parameter shared_pool_size; <-- 변경된 shared_pool_size 값 확인
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 64M
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
shared_pool_size big integer 64M
1.1 라이브러리 캐시 (Library Cache)
- 가장 최근에 사용한 SQL문과 PL/SQL문, 구문 분석 트리, 실행계획에 대한 정보가 저장한다.
- LRU (Least Recently Used) 알고리즘으로 관리된다.
(Shared Pool의 크기가 너무 작으면 명령문이 라이브러리 캐시로 계속 재로드되어 성능이 떨어진다.)
+ Shared SQL 영역과 Shared PL/SQL 영역으로 구분된다.
+ Shared SQL 영역
- SQL문장에 대한 실행계획과 파싱 트리를 저장하고 공유한다.
- 다음에 동일한 SQL문을 실행할 때에는 Shared Pool에 있는 구문 분석 정보를 이용하여 신속하게 처리할 수 있다.
- SQL문에서 필요할 때마다 공유 SQL영역을 사용할 수 있게 하려면 텍스트, 스키마, 바인드 변수가 동일해야 한다.
+ Shared PL/SQL 영역
- 최근에 실행된 PL/SQL문을 저장하고 공유한다.
- 구문 분석되고 컴파일된 프로그램 단위와 프로시저(함수, 패키지, 트리거)가 저장된다.
1.2 데이터 딕셔너리 캐시 (Data Dictionary Cache)
- 데이터베이스 파일, 테이블, 인덱스, 컬럼, 사용자 권한 등 가장 최근에 사용된 데이터 사전의 정보를 저장한다.
- 구문분석 단계에서 서버 프로세스는 데이터 딕셔너리에서 정보를 찾아 객체 이름을 해석하고 액세스를 확인한다.
- 데이터 딕셔너리 정보를 메모리에 캐시하면 질의와 DML에 대한 응답시간이 줄어든다.
- Shared Pool 크기 조정에 따라 Data Dictionary Cache의 크기가 결정된다.
- Data Dictionary 정보를 Database buffer cache와 Shared Pool 메모리에 다중 캐시하여 성능을 향상시킬 수 있다.
2. 데이터베이스 버퍼 캐시 (Database Buffer Cache)
- 데이터 파일에서 검색된 데이터 블록의 복사본을 저장한다.
- 디스크에 완전히 쓰여지지 않는 수정된 데이터를 보유할 수도 있다.
- LRU 알고리즘을 통해 관리된다.
- 데이터를 얻거나 갱신할 때 성능이 크게 향상된다.
- DB_BLOCK_SIZE는 SYSTEM 테이블스페이스에서 사용되는 기본 블록의 크기를 결정
(데이터베이스 버퍼 캐시에 있는 각 버퍼의 크기는 Oracle 블록의 크기가 동일)
+ Sub Cache 구성 - Database Buffer Cache의 크기를 정의
- DB_CACHE_SIZE : 디폴투 버퍼 캐시의 크기만 조정. 이 값은 0으로 설정할 수 없고, 반드시 존재해야 한다.
- DB_KEEP_CAHCE_SIZE : Keep Buffer Cache의 크기를 조정. 재사용될 메모리 블록을 고정적으로 저장하는데 사용
- DB_RECYCLE_CACHE_SIZE : Recycle Buffer Cache의 크기를 조정. 거의 재사용되지 않을 메모리블록을 제거하는데 사용
- 독립된 Sub Cache는 동적으로 크기를 변경할 수 있다.
SQL> alter system set db_cache_size = 96m;
SQL> alter system set db_keep_cache_size = 16m;
SQL> alter system set db_recycle_cache_size = 16m;
SQL> alter system set db_keep_cache_size = 16m;
SQL> alter system set db_recycle_cache_size = 16m;
- DB_CACHE_ADVICE는 다양한 캐시 크기의 작업을 예측하기 위한 통계를 수집하도록 설정된다.
(수집된 버퍼 캐시 권고 정보는 V$DB_CACHE_ADVICE 뷰는 통계를 표시된다.)
+ DB_CACHE_ADVICE 파라미터는 동적으로 크기를 변경할 수 있으며 OFF, ON, READY 3가지 값을 사용할 수 있다.
- OFF : 권고가 해제되고 권고에 대한 메모리가 할당되지 않는다.
- ON : 권소가 설정되고 CPU 및 메모리 오버헤드가 모두 발생한다.
- READY : 권고가 해제되지만 권고에 대한 메모리는 할당된 상태로 유지된다.
3. 리두 로그 버퍼 (Redo Log Buffer)
- 데이터베이스 데이터 블록의 모든 변경 사항(리두 항목)을 기록하는 Circular(순환) Buffer 이다. (LGWR에 의해 저장된다.)
- 리두 항목에는 변경 사항을 재구성하거나 재실행할 정보가 포함되어 있다.
(insert, update, delete, create, alter, drop 작업에 의해 변경되기 전의 데이터를 재생성해야 하는 정보가 포함된다.)
- Redo Log Buffer의 기본 목적은 '복구'이다.
- Redo Log Buffer의 크기는 LOG_BUFFER로 정의된다.
4. 대용량 풀 (Large Pool)
- SGA의 선택적 메모리 영역으로, Shared Pool의 부담을 줄인다.
- LARGE_POOL_SIZE로 크기가 조정된다.
+ 용도 : 공유 서버의 세션 메모리 (UGA), I/O 서버 프로세스, 백업 및 복원 작업 또는 RMAN, 병렬 실행 메시지 버퍼
+ 백업 및 복원
- RMAN이 BACKUP_DISK_IO = n 및 BACKUP_TAPE_IO_SLAVE = TRUE 파라미터가 설정된 경우 Large Pool 사용
- Large Pool이 구성되어도 크기가 충분하지 않으면 Large Pool에서 메모리를 할당할 수 없다.
- RMAN은 오유 메시지를 경고 로그 파일에 쓰며 백업 또는 복원을 위해 I/O슬래이브를 사용하지 않는다.
- 병렬 실행 : PARALLEL_AUTOMATIC_TUNING이 TURE로 설정되면 Large Pool이 사용되고 아니면 Shared Pool에 할당.
5. 자바 풀 (Java Pool)
- Java로 작성된 프로그램을 실행할 때 실행 계획을 저장하는 영역이다.
- JAVA_POOL_SIZE 파라미터에 의해 바이트 단위로 크기가 조정되며 기본 크기는 24MB이다.
6. Stream Pool
- 데이터베이스 사이에 stream을 통한 정보 공유를 위한 영역
- stream 공간이 필요하게 되면 shared pool의 10%까지 할당하여 사용한다.
- STREAM_POOL_SIZE에 의해 크기가 조정된다.

- Oracle 데이터베이스에 접속하는 각 사용자 프로세스를 위해 예약된 메모리 공간이다.
- 단일 프로세스 또는 단일 백그라운드 프로세스의 정보를 제어하는 메모리 영역이다.
- 프로세스가 생성될 때 할당되고 프로세스가 종료될 때 할당이 해제된다.
- 여러 프로세스가 공유하는 SGA와 달리 PGA는 단 하나의 프로세스가 사용하는 영역이다.
LIST
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 10g
- VMware
- T-SQL Programming
- 시스템 함수
- dbca
- Network
- enterprise linux
- 자격증
- Java
- ASP.NET
- 함수
- Enterprise-R4-U4
- install
- putty
- 십이지권
- 자금우
- 자바
- Oracle 10g
- webserver 구축
- CSS
- scriptmanager
- HTML
- SQLPLUS
- asp
- Microsoft Certified IT Professional
- Calendar Popup
- SQL SERVER 2008
- MSSQL
- docuprint203a
- oracle
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
글 보관함