2024. 10. 23. 12:47ㆍDBMS/ORACLE Admin
오라클 메모리 관리 개요
오라클 데이터베이스는 메모리를 효율적으로 관리하여 성능을 최적화한다. 메모리는 크게 SGA(System Global Area)와 PGA(Program Global Area)로 나눌 수 있다.
- SGA (System Global Area): 오라클 인스턴스가 작동하는 동안 공유 메모리 영역으로 사용된다. 모든 사용자와 프로세스가 SGA를 공유하며, 여기에는 데이터 캐시, SQL 캐시 등이 포함된다.
- PGA (Program Global Area): 각 사용자 세션이나 서버 프로세스마다 고유한 메모리 영역으로, 프로세스 간에 공유되지 않다. 주로 세션 정보를 저장하고 처리하는 데 사용된다.
9i 버전에서의 메모리 관리
오라클 9i 버전 이전에는 메모리 관리가 매우 제한적이었다. DBA가 SGA와 PGA 크기를 수동으로 설정해야 했고, 설정이 변경되면 인스턴스를 다시 시작해야만 적용되는 비효율적인 방식이었다. 이로 인해 시스템 관리가 어렵고 유연성이 부족했다.
하지만 오라클 9i 버전부터는 동적으로 메모리 관련 파라미터를 변경하고 즉시 적용할 수 있는 기술이 도입되었다. 이를 통해 데이터베이스 인스턴스를 다시 시작하지 않고도 메모리 크기를 조정할 수 있게 되어 훨씬 더 유연하고 효율적인 메모리 관리가 가능해졌다.
- 동적 메모리 관리: ALTER SYSTEM SET 명령어를 사용하여 메모리 파라미터를 동적으로 변경하여 시스템 운영 중에도 메모리 할당을 조정할 수 있다.
오라클의 동적 메모리 관리
오라클 9i부터 메모리 관련 파라미터들을 데이터베이스 인스턴스를 다시 시작하지 않고 동적으로 변경할 수 있는 기능이 추가되었다.
- 9.0.1 버전에서는 Default Buffer Cache의 크기를 동적으로 변경할 수 있었다.
- 9.2 버전부터는 Shared Pool, Default Buffer Cache, Large Pool, Java Pool의 크기를 동적으로 조정할 수 있게 되었고,
- 10g 버전에서는 Streams Pool이 추가되어 더 다양한 메모리 풀의 동적 변경이 가능해졌다.
SGA의 크기 제한
주의할 점은 SGA 내 각 메모리 영역의 합계가 SGA_MAX_SIZE 파라미터로 설정된 값보다 클 수 없다는 것이다. , Shared Pool의 크기를 증가시키려면 다른 메모리 영역의 크기를 줄여야만 한다.
그래뉼 (Granule)
오라클은 메모리를 할당할 때 그래뉼(granule) 단위로 할당한다. 그래뉼은 SGA 메모리를 관리할 때 사용하는 최소 할당 단위이다.
- SGA 크기가 128MB 이하일 경우 한 그래뉼의 크기는 4MB이다.
- SGA 크기가 128MB를 초과하면 한 그래뉼의 크기는 16MB로 증가한다.
- 10g 버전부터는 SGA의 크기가 128MB 이상일 때 그래뉼 크기가 16MB로 표준화되었다.
SGA 총 크기와 그래뉼 크기 확인
- Granule Size
- Granule은 Oracle 메모리 관리에서 사용되는 단위로 각 백그라운드 프로세스가 메모리를 할당하고 사용하는 방법이다.
- Oracle 프로세스들이 /dev/shm/ora_testdb_98305_XX와 같은 공유 메모리 영역을 사용하고 있으며, 이 영역은 Granule 단위로 할당되고 관리된다.
- pmap 명령어를 통한 프로세스 메모리 확인:
- pmon 프로세스의 메모리 매핑을 보여준다.
- 각 메모리 영역은 /dev/shm/로 시작하는 공유 메모리로, Oracle 데이터베이스의 특정 SGA 영역과 관련된 메모리를 나타낸다.
- 출력 결과로 프로세스가 할당받은 메모리 크기와 상태(읽기 가능, 쓰기 가능 등)가 나와 있다.
- pmon 프로세스의 메모리 매핑을 보여준다.
- 주의사항:
- 명령어에서 사용된 틸드(~)와 함께 있는 기호는 정확히 입력해야 명령어가 정상적으로 작동한다.
- Oracle 메모리를 관리하는 데 사용되는 도구나 명령어의 출력은 SGA나 PGA 같은 메모리 할당에 대한 중요한 정보를 제공한다.
- PGA 관리 모드:
- Oracle은 PGA(Program Global Area)를 관리하는 두 가지 모드를 제공한다: 수동 관리 모드와 자동 관리 모드.
- 파라미터 WORKAREA_SIZE_POLICY를 AUTO로 설정하면, Oracle이 PGA 메모리를 자동으로 관리하게 된다. 수동 모드에서는 사용자가 직접 설정을 조정해야 하지만, 자동 모드에서는 Oracle이 워크로드에 따라 메모리를 동적으로 할당하고 조정한다.
- PGA_AGGREGATE_TARGET 파라미터는 전체 서버에서 사용할 수 있는 PGA 메모리의 목표 크기를 정의하는 파라미터이다. 이 값을 설정함으로써 Oracle은 메모리 할당을 조정할 수 있다.
- PGA_MAX_SIZE는 하나의 프로세스가 사용할 수 있는 PGA 메모리의 최대 크기를 나타낸다. 이 값은 바이트(bytes) 단위로 설정되며, 직렬 처리 및 병렬 처리 시 모두 적용되는 최대값이다.
- _smm_max_size는 하나의 프로세스가 직렬 처리를 수행할 때 사용할 수 있는 PGA의 최대 크기를 나타낸다. 이 값은 킬로바이트(kb) 단위로 표시된다.
- _smm_px_max_size는 하나의 프로세스가 병렬 처리를 수행할 때 사용할 수 있는 PGA의 최대 크기를 나타낸다. 이 역시 킬로바이트(kb) 단위로 설정된다.
- PGA 관련 파라미터 조회
select a.ksppinm, b.ksppstvl
from x$ksppi a, x$ksppsv b
where a.indx = b.indx and a.ksppinm like '%size%';

PGA 메모리 관리의 중요성:
- Sort나 Hash 작업은 PGA 메모리에서 수행되며, 이러한 작업의 효율성은 PGA 메모리의 할당 크기에 크게 의존한다. 즉, 대량의 데이터 처리를 할 때 PGA 메모리가 충분히 할당되지 않으면 성능 저하가 발생할 수 있다.
PGA 메모리 할당 제한:
- Oracle에서 PGA_AGGREGATE_TARGET으로 전체 PGA 메모리를 관리할 수 있지만, 개별 작업이 사용할 수 있는 메모리 양은 제한된다. , 직렬 처리 작업의 경우, 사용할 수 있는 최대 PGA 메모리는 다음과 같이 계산된다:
- min(5% of PGA_AGGREGATE_TARGET, 100MB).
- 병렬 처리 작업의 경우, 각 병렬 프로세스는 다음과 같이 할당된다:
- min(30% of PGA_AGGREGATE_TARGET / 병렬 실행 수).
메모리 부족 문제 해결 방법:
- 대량의 Sort나 Hash 작업이 발생하는 경우, 기본 자동 설정을 사용하면 PGA 메모리가 충분히 할당되지 않을 수 있다. 이럴 때는 WORKAREA_SIZE_POLICY를 manual 모드로 설정한 후, SORT_AREA_SIZE와 HASH_AREA_SIZE 같은 파라미터 값을 수동으로 설정하여 메모리 사용량을 조정할 수 있다.
수동 설정의 이점:
- 수동으로 설정하면 PGA_AGGREGATE_TARGET에 의해 제한되지만, 세션별로 작업에 필요한 메모리 값을 더 세밀하게 조정할 수 있다. 이 방법은 특히 대량의 데이터 처리가 필요한 경우 성능 향상에 도움이 된다.
PGA_AGGREGATE_TARGET의 크기를 충분히 크게 설정해야 성능상의 이점을 얻을 수 있다. 만약 PGA 메모리가 부족하면, ORA-4030 오류가 발생할 수 있다. 이 오류는 메모리 부족으로 인해 프로세스가 작업을 수행하지 못할 때 발생한다.
- 사용 중인 Parallel Query 작업의 상태(예: busy 또는 idle)를 확인하기 위해 V$PGA_SYSSTAT 뷰를 조회할 수 있다. 해당 뷰를 통해 현재 PGA 관련 통계 정보를 얻을 수 있다.
- 10g 버전의 메모리 관리 기법:
- Oracle 9i부터는 공유 메모리(SGA)를 동적으로(Dynamic) 변경할 수 있는 기능이 도입되어 메모리 관리가 보다 편리해졌다.
- Oracle 10g에서는 이보다 진보된 메모리 관리 기술인 Automatic Shared Memory Management(ASMM)이 도입되었다. SGA의 주요 구성 요소들의 크기를 데이터베이스가 자동으로 조정하는 기능으로 관리자는 수동으로 메모리를 조정할 필요가 줄어든다.
- ASMM의 자동 메모리 조정:
- ASMM은 MMAN(Memory Manager)이라는 백그라운드 프로세스가 SGA의 워크로드를 모니터링하고, 메모리가 부족한 부분과 충분한 부분을 판단하여 메모리를 효율적으로 재배치하는 역할을 한다.
- 이 과정에서 MMON(Manageability Monitor) 프로세스는 SYSAUX 테이블스페이스에 저장된 통계 정보를 참고하며, 각종 Advisor들이 실시간으로 제공하는 정보를 활용하여 메모리 조정에 필요한 데이터를 제공한다.
- 자동 조정 가능한 SGA 구성 요소:
- Shared Pool
- Default Database Buffer Cache
- Large Pool
- Java Pool
- Streams Pool
▶ SGA_TARGET과 SGA_MAX_SIZE와 관련된 핵심 사항
1. SGA 자동 관리:
- SGA_TARGET은 데이터베이스에서 SGA(Shared Global Area)의 자동 조정을 위한 총 메모리 용량을 지정하는 파라미터이다. 이 파라미터는 시스템의 메모리 요구 사항에 따라 Shared Pool, Buffer Cache 등의 크기를 자동으로 조정한다.
- SGA_TARGET 값은 SGA_MAX_SIZE 값을 초과할 수 없으며, 이는 설정 가능한 SGA의 최대 크기를 의미한다.
2. 자동 튜닝되는 파라미터:
- SGA_TARGET을 설정하면, SGA의 주요 구성 요소 중 몇 가지는 Oracle이 자동으로 메모리 크기를 조정할 수 있고 데이터베이스의 워크로드에 맞춰 자동으로 튜닝된다.
자동 튜닝되는 동적 파라미터:
- DB_CACHE_SIZE
- SHARED_POOL_SIZE
- LARGE_POOL_SIZE
- JAVA_POOL_SIZE
3. 수동으로 설정해야 하는 파라미터:
반면에 일부 파라미터는 여전히 수동으로 설정해야 하며, Oracle이 자동으로 조정하지 않는다.
수동 튜닝이 필요한 동적 파라미터:
- DB_KEEP_CACHE_SIZE
- DB_RECYCLE_CACHE_SIZE
- DB_nK_CACHE_SIZE
DB_KEEP_CACHE_SIZE
- 이 파라미터는 데이터베이스의 KEEP 영역에 할당할 메모리 크기를 정의한다. KEEP 캐시는 자주 액세스되는 데이터 블록을 유지하는 데 사용되며, 이 캐시를 통해 I/O 성능을 개선할 수 있다.
- 주로 안정적이고 빈번하게 조회되는 데이터에 대해 I/O를 최소화하기 위해 사용되며 작은 데이터셋이나 캐시될 필요가 있는 중요한 데이터에 적합한다.
DB_RECYCLE_CACHE_SIZE
- RECYCLE 캐시는 메모리에서 데이터를 자주 제거하고 다시 추가하는 용도로 사용된다. 이 캐시는 사용되지 않는 데이터 블록을 저장하여 메모리를 효율적으로 활용한다.
- 일반적으로 변경이 잦은 데이터에 대해 사용되며, I/O 성능이 중요한 경우에 활용된다. 데이터가 자주 들어오고 나가는 상황에서 유용한다.
DB_nK_CACHE_SIZE
- 이 파라미터는 특정 크기(예: nK)의 데이터 블록을 저장하는 캐시의 크기를 설정한다. 데이터베이스에서 특정 유형의 블록 크기에 따라 조정된다.
- 다양한 데이터 블록 크기를 효율적으로 관리하여 데이터베이스 성능을 최적화하는 데 사용된다
4. SGA_TARGET의 설정 예시:
, SGA_TARGET을 2GB로 설정하고 Shared Pool의 크기를 180MB로 설정했다고 가정하면, SGA_TARGET 내에서 자동 조정이 일어난다. 또한 SGA_MAX_SIZE를 초과하지 않는 범위 내에서 이 조정이 이루어진다.
5. 파라미터 조회 및 설정:
- 현재 설정된 SGA_TARGET 값은 다음과 같이 조회할 수 있다:

6. STATISTICS_LEVEL 파라미터:
- 자동 메모리 관리를 활성화하려면 STATISTICS_LEVEL 파라미터가 TYPICAL 또는 ALL로 설정되어야 한다. 이 파라미터가 BASIC으로 설정되면 자동 메모리 관리 기능이 비활성화되므로, 설정 시 주의해야 한다.
▶ Oracle 데이터베이스에서 SGA_TARGET을 설정하고 SGA 구성 요소들이 자동으로 관리되는 것을 확인
1. SGA_TARGET 설정:
SGA_TARGET을 설정하여 데이터베이스가 자동으로 SGA 영역을 관리하도록 설정한다. 이를 통해 Oracle은 SGA_TARGET 값 내에서 메모리를 자동으로 재분배하게 된다.

SGA_TARGET을 100MB로 설정
2. SGA 구성 요소 조회:
v$sga_dynamic_components 뷰를 통해 각 SGA 구성 요소들이 얼마나 많은 메모리를 현재 할당받았는지, 최소 크기와 사용자가 설정한 크기 등을 확인할 수 있다.

3. 결과 해석:
- COMPONENT: 메모리 구성 요소의 이름.
- CURR_MB: 현재 할당된 메모리 크기(메가바이트).
- MIN_MB: 최소 할당된 메모리 크기(메가바이트).
- USER_MB: 사용자가 설정한 메모리 크기(메가바이트).
- shared pool: 현재 168MB가 할당되어 있으며, 최소 116MB가 요구된다. 사용자는 메모리를 설정하지 않았다.
- large pool: 현재 8MB가 할당되어 있으며, 최소 8MB가 요구된다. 사용자 설정은 없다.
- java pool: 현재 4MB가 할당되어 있으며, 최소 4MB가 요구된다. 사용자 설정은 없다.
- streams pool: 현재 8MB가 할당되어 있으며, 최소 8MB가 요구된다. 사용자 설정은 8MB로 되어 있다.
- DEFAULT buffer cache: 현재 300MB가 할당되어 있으며, 최소 200MB가 요구된다. 사용자 설정은 없다.
- KEEP buffer cache: 현재 0MB가 할당되어 있으며, 최소 요구 사항도 없다. 즉, 사용되지 않고 있다.
- RECYCLE buffer cache: 현재 0MB가 할당되어 있으며, 최소 요구 사항도 없다. 사용되지 않고 있다.
- DEFAULT 2K/4K/8K/16K/32K buffer cache: 이들은 특정 블록 크기별로 설정된 기본 버퍼 캐시로, 현재 할당된 메모리는 없다.
- Shared IO Pool: 현재 16MB가 할당되어 있으며, 최소 요구 사항은 0MB이다. 사용자는 설정하지 않았다.
- Data Transfer Cache: 현재 0MB가 할당되어 있으며, 최소 요구 사항도 없다. 사용되지 않고 있다.
- In-Memory Area: 현재 0MB가 할당되어 있으며, 최소 요구 사항도 없다. 사용되지 않고 있다.
- ASM Buffer Cache: 현재 0MB가 할당되어 있으며, 최소 요구 사항도 없다. 사용되지 않고 있다.
▶ SGA 메모리 관리와 관련하여 SGA_TARGET 값을 조정할 때 발생하는 상황
SGA_TARGET 조정 실패:
- ALTER SYSTEM SET sga_target = 378M; 명령어로 SGA_TARGET 값을 조정하려 했으나, SGA_MAX_SIZE에 의해 제한되어 실패했다.
- SGA_TARGET은 SGA_MAX_SIZE를 초과할 수 없으며, 로그 버퍼 등 일부 메모리 영역을 제외한 크기만을 사용할 수 있다.
- 남아있는 메모리 확인:
- v$sga_dynamic_free_memory 뷰를 통해 사용 가능한 메모리 공간을 확인할 수 있다.
-
SELECT * FROM v$sga_dynamic_free_memory;
- SGA 구성 요소 동적 변경 확인:
- 테스트 테이블을 생성하고 데이터를 삽입한 후 v$sga_dynamic_components 뷰를 통해 DEFAULT buffer cache 크기가 자동으로 증가하는 것을 확인했다.
-
SELECT component, current_size/1024/1024 curr_MB, min_size/1024/1024 min_MB, user_specified_size/1024/1024 user_MB FROM v$sga_dynamic_components;
현재 크기 테이블 테스트 후
초기 상태- DEFAULT buffer cache: 초기에는 300MB로 설정되어 있었고, 사용자 지정 크기는 없었다.
- shared pool: 초기에는 168MB였으며, 최소 요구 크기는 116MB였다.
- shared pool: 데이터 삽입 후 176MB로 증가했다. 이는 추가적인 메모리가 필요해졌음을 나타낸다. 데이터베이스는 쿼리 실행 및 기타 작업을 지원하기 위해 공유 풀에 더 많은 메모리를 할당했다.
- DEFAULT buffer cache: 300MB에서 292MB로 감소했다. 데이터베이스에서 사용 가능한 메모리를 효율적으로 관리하기 위해 일부 메모리가 회수되었음을 나타낸다. 이는 SGA의 동적 조정 기능이 활성화되어 있음을 보여준다.
- 데이터 삽입 과정에서 shared pool이 증가하여 쿼리 처리에 필요한 메모리를 확보했다.
- 반면에, DEFAULT buffer cache는 데이터 삽입 후 요구되는 메모리 상황에 따라 동적으로 조정되어 292MB로 감소했다.
- SGA 리사이즈 작업 확인:
- v$sga_resize_ops 뷰를 통해 DEFAULT buffer cache가 어떻게 증가했는지에 대한 자세한 내역을 조회할 수 있다.
- GROW 작업을 통해 DEFAULT buffer cache의 크기가 수동으로 변경된 것이 확인되었다.
SELECT component,
oper_type,
oper_mode,
initial_size / 1024 / 1024 AS INITIAL_MB,
target_size / 1024 / 1024 AS TARGET_MB,
final_size / 1024 / 1024 AS FINAL_MB,
status
FROM v$sga_resize_ops;
- component: SGA 구성 요소 이름.
- oper_type: 작업 유형 (예: 증가 또는 감소).
- oper_mode: 작업 모드 (예: 동적 또는 고정).
- initial_size: 작업 시작 시의 크기 (MB 단위).
- target_size: 작업 목표 크기 (MB 단위).
- final_size: 작업 완료 후의 크기 (MB 단위).
- status: 작업 상태 (예: 진행 중, 완료 등).
OPER_TYPE
- STATIC: 해당 구성 요소의 크기가 변경되지 않음을 의미한다. 고정된 크기로 설정되어 있으며, 동적으로 조정되지 않는다.
- GROW: 해당 구성 요소의 크기를 늘리는 작업이다. 현재 크기에서 목표 크기로 증가시키는 과정을 나타낸다.
- SHRINK: 해당 구성 요소의 크기를 줄이는 작업이다. 현재 크기에서 목표 크기로 감소시키는 과정을 나타낸다.
OPER_MODE
- IMMEDIATE: 변경 사항이 즉시 적용된다. 리사이즈 작업이 즉시 수행되며, 사용 중인 메모리에 영향을 미치지 않고 즉시 크기가 변경된다.
- DEFERRED: 변경 사항이 지연되어 나중에 적용된다. 즉시 적용되지 않으며, 시스템의 메모리 관리 정책에 따라 나중에 작업이 수행될 수 있다.
■ 11g 버전에서의 메모리 관리 기법
Oracle 11g 버전에서는 Automatic Memory Management (AMM) 기능을 통해 메모리를 더 효율적으로 관리할 수 있다. 이전의 9i 버전에서 사용된 Dynamic SGA Management가 발전된 형태로, SGA 및 PGA 메모리를 자동으로 관리하는 기능이 추가되었다.
Automatic Memory Management (AMM) 기능
Oracle 11g에서는 메모리를 관리하는 두 가지 주요 파라미터가 추가되었다:
- MEMORY_TARGET
- 이 파라미터는 자동으로 관리할 메모리의 총량을 지정한다. SGA와 PGA를 모두 포함하며, 오라클은 이 파라미터 내에서 메모리의 양을 조정하며 관리한다.
- MEMORY_MAX_SIZE 파라미터의 최대 값까지 설정할 수 있다. 기본값은 0이며, 이는 이 기능을 사용하지 않는다는 의미이다.
- MEMORY_MAX_TARGET
- 이 파라미터는 MEMORY_TARGET 값이 증가할 수 있는 최대 한계를 지정하는 용도로 사용된다. 만약 이 파라미터를 설정하지 않으면 기본적으로 MEMORY_TARGET과 동일한 값으로 설정된다.
기능 설정 시 권장사항
- AMM 기능을 사용하면 SGA_TARGET이나 PGA_AGGREGATE_TARGET 값을 별도로 지정할 필요가 없다. 만약 지정한다면, 오라클은 그 값을 최소값으로 인식한다.
- 따라서, 자동 메모리 관리 기능을 사용할 때는 SGA_TARGET 및 PGA_AGGREGATE_TARGET 파라미터의 값을 0으로 설정하는 것이 좋다.
에러 및 해결 방법
AMM 기능을 사용하기 위해서는 충분한 물리적 메모리 공간이 필요한다. 만약 메모리 공간이 부족할 경우, 다음과 같은 에러가 발생할 수 있다:
ORA-00845: MEMORY_TARGET not supported on this system
이 에러는 시스템에서 /dev/shm 공간이 부족할 때 발생한다. /dev/shm은 Linux의 공유 메모리 공간이며, 오라클이 이 공간을 메시스템 메모리 확인 방법
리눅스에서 /dev/shm 공간을 확인하려면 아래 명령어를 사용한다:

- Size: 공유 메모리의 총 크기
- Used: 사용 중인 메모리
- Avail: 남은 메모리
- Use%: 사용 비율
AMM 설정
Oracle 11g에서 AMM 기능을 설정하는 방법은 다음과 같다:
MEMORY_TARGET 설정:

MEMORY_MAX_SIZE 설정:

서버 재시작:
Oracle에서 메모리 관리 및 설정 방법 정리 2.
1. Oracle 11g에서의 메모리 관리 기능 개요
Oracle 11g에서는 Automatic Memory Management (AMM) 기능을 통해 SGA와 PGA를 자동으로 관리할 수 있다. 이전 버전의 Dynamic SGA Management에서 발전된 형태로, SGA와 PGA의 크기를 자동으로 조정하며 성능을 최적화할 수 있다.
2. 주요 메모리 관리 파라미터
- MEMORY_TARGET
- AMM 기능을 사용하여 SGA와 PGA를 통합적으로 관리하는 파라미터이다.
- 이 파라미터는 시스템의 메모리 사용량을 자동으로 조정한다.
- MEMORY_MAX_SIZE 값 내에서 메모리를 조정한다.
- 기본값: 0 (비활성화)
- MEMORY_MAX_TARGET
- MEMORY_TARGET의 최대 크기를 제한하는 파라미터이다.
- MEMORY_MAX_SIZE와 동등한 값으로 설정되지 않으면 설정된 범위 내에서 조정된다.
3. 에러 발생과 해결 방법
- ORA-00845: MEMORY_TARGET not supported on this system
- 시스템의 메모리 공간이 부족할 경우 발생하는 에러이다. 이때, Linux의 /dev/shm 공간을 확인하여 메모리 부족 문제를 해결해야 한다.
df -h /dev/shm
- ORA-00837: Specified value of MEMORY_TARGET greater than MEMORY_MAX_TARGET
- MEMORY_TARGET이 MEMORY_MAX_TARGET 값을 초과하려고 할 때 발생하는 에러이다. MEMORY_MAX_TARGET 값을 적절히 조정하여 해결할 수 있다.
4. 메모리 관리 설정 예시
MEMORY_TARGET 및 MEMORY_MAX_TARGET 설정
-SGA와 PGA 설정 조회
ALTER SYSTEM SET MEMORY_TARGET = 400M SCOPE = SPFILE;
ALTER SYSTEM SET MEMORY_MAX_TARGET = 450M SCOPE = SPFILE;
SHUTDOWN IMMEDIATE;
STARTUP;
- PGA 사용량 확인
SELECT name, value/1024/1024 AS MB
FROM v$parameter
WHERE name IN ('pga_aggregate_target', 'sga_target');
-적절한 MEMORY_TARGET 값 계산

SELECT ROUND((s.value + GREATEST(p.value, mp.value)) / 1024 / 1024) AS memory_target
FROM (SELECT value FROM v$parameter WHERE name = 'sga_target') s,
(SELECT value FROM v$parameter WHERE name = 'pga_aggregate_target') p,
(SELECT value FROM v$pgastat WHERE name = 'maximum PGA allocated') mp;
-현재 메모리 사용 내역 조회
SELECT component, current_size/1024/1024 AS curr_MB,
min_size/1024/1024 AS min_MB,
max_size/1024/1024 AS max_MB
FROM v$memory_dynamic_components
WHERE current_size > 0;
5. 메모리 관리 성능 관계 advice 조회
V$MEMORY_TARGET_ADVICE 뷰를 통해 메모리 크기와 데이터베이스 성능의 관계를 조회할 수 있다.
SELECT memory_size, memory_size_factor, estd_db_time, estd_db_time_factor
FROM v$memory_target_advice
ORDER BY memory_size;
- MEMORY_SIZE: 현재 또는 제안된 메모리 크기
- MEMORY_SIZE_FACTOR: 메모리 크기의 배율
- ESTD_DB_TIME: 현재 또는 제안된 메모리 크기에 따른 예상 데이터베이스 시간
- ESTD_DB_TIME_FACTOR: 예상 데이터베이스 시간이 현재 대비 몇 배인지를 나타냄
결과 해석
- MEMORY_SIZE:
- 데이터베이스에서 설정할 수 있는 메모리 크기를 나타낸다. 값이 증가할수록 데이터베이스가 사용할 수 있는 메모리 용량이 커진다.
- 예: 376MB, 752MB, 1128MB 등.
- MEMORY_SIZE_FACTOR:
- 메모리 크기에 대한 비율을 나타낸다. 이 값은 기본 메모리 크기(예: 1504MB)에 대한 비율이다.
- 예: 0.25는 1504MB의 25%에 해당하는 메모리 크기이다.
- ESTD_DB_TIME:
- 각 메모리 크기 설정에 대해 추정된 데이터베이스 실행 시간을 나타낸다. 여기서는 모든 메모리 크기에 대해 추정된 실행 시간이 동일하게 24로 나타나 있다.
- 이는 메모리 크기가 증가해도 성능 개선이 없음을 의미한다.
- ESTD_DB_TIME_FACTOR:
- 추정된 데이터베이스 시간의 비율로, 기본값에 대한 상대적인 시간을 나타낸다. 여기서 모든 값이 1에 가깝거나 동일하게 보이므로, 메모리 크기의 변화가 데이터베이스 실행 시간에 미치는 영향이 적음을 나타낸다.
'DBMS > ORACLE Admin' 카테고리의 다른 글
오라클 관리 03 DBMS_JOB, DBMS_SCHEDULER (0) | 2024.10.25 |
---|---|
오라클 관리 02 사용자 (0) | 2024.10.24 |
오라클 인프라 (6) | 2024.10.06 |
멀티테넌트 아키텍처 (3) | 2024.09.16 |
Deferred Segment (0) | 2024.09.12 |