본문 바로가기
Oracle/운영

메모리 자동 관리 방법(PGA,SGA)

by 취미툰 2020. 2. 13.
반응형

9i의 메모리자동관리방법

9i의 메모리 자동관리방법은 PGA만 자동관리 할 수 있습니다.

 

▶ PGA자동관리를 사용하기 위한 조건

- WORKAREA_SIZE_POLICY 파라미터를 AUTO로 설정

- PGA_AGGREGATE_TARGET 파라미터값을 0 이상으로 설정(PGA 전체 크기 할당)

 

수동관리일 경우

- WORKAREA_SIZE_POLICY 파라미터를 MANUAL로 설정

- sort_area_size, hash_area_size, bitmap_merge_area_size, create_bitmap_area_size *_AREA_SIZE를 따로 설정

 

테스트

현재 PGA관리 상태를 확인(9i R2 환경에서 진행하였음)

 

SQL> show parameter pga

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target                 big integer 25165824

 

SQL> show parameter workarea_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

workarea_size_policy                 string      AUTO

 

SQL> select * from v$pgastat;

NAME                                  VALUE UNIT

-------------------------------- ---------- ------------

aggregate PGA target parameter     25165824 bytes

(생략)

16 rows selected.

 

SQL> show parameter _AREA_SIZE

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

bitmap_merge_area_size               integer     1048576

create_bitmap_area_size              integer     8388608

hash_area_size                       integer     131072

sort_area_size                       integer     65536

workarea_size_policy                 string      AUTO

 

- 현재 PGAAUTO로 관리되고 있고 25165824byte가 할당되어 있음을 확인

 

▶PGA 사이즈를 80M로 변경

SQL> alter system set pga_aggregate_target = 80m;

System altered.

 

 

 

 

SQL> show parameter pga

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target                 big integer 83886080

 

SQL> select * from v$pgastat;

NAME                                 VALUE UNIT

------------------------------- ---------- ------------

aggregate PGA target parameter    83886080 bytes

…(생략)

 

- DB 재기동 없이 바로 적용된 모습을 볼 수 있습니다.

 

 

10g의 메모리 자동관리 방법(SGA) - ASMM

10g의 메모리 자동관리방법은 SGA를 자동관리 할 수 있습니다.

 

▶ ASMM(Automatic Shared Memory Management)

- 10g에서 처음도입하고 10g R2에서 더욱 향상된 메모리 자동관리 기법

- SGA의 구성요소 중 5가지

Shared_pool

DB_buffer_cache

Large_pool

Java_pool

Streams_pool

의 메모리 관리를 자동으로 수행함

- SGA_TARGET 파라미터만 셋팅하면 됩니다.

 

▶ ASMM을 사용하기 위한 조건

- STATISTICS_LEVEL 파라미터값이 typical 또는 ALL로 설정

- SGA_TARGET 파라미터값이 0보다 큰 값으로 설정(0은 사용하지 않음을 의미)

- SGA_MAX_SIZE 파라미터값을 SGA_TARGET 파라미터값과 동일하게 설정하는 것을 권장

- SGA_MAX_SIZEASMM에서 사용할 최대값을 지정하는 것이며 이 값 내에서 SGA_TARGET이 이루어지게 됨

- 위에서 설명한 5가지 파라미터값(SHARED_POOL_SIZE, DB_CACHE_SIZE, JAVA_POOL_SIZE, LARGE_POOL_SIZE, STREAMS_POOL_SIZE)0으로 지정

 

테스트

현재 설정된 SGA_TARGETSGA_MAX_TARGET 메모리 확인 (10g R2 DB를 이용)

SQL> show sga

Total System Global Area  364904448 bytes

Fixed Size                  2096312 bytes

Variable Size             155190088 bytes

Database Buffers          201326592 bytes

Redo Buffers                6291456 bytes

 

SQL> show parameter sga

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 348M

sga_target                           big integer 348M

 

-현재 SGA_TARGETSGA_MAX_TARGET348M로 설정되어 있고 실제 SGA의 크기도 동일합니다.

 

SQL> show parameter pool_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

global_context_pool_size             string

java_pool_size                       big integer 0

large_pool_size                      big integer 0

olap_page_pool_size                  big integer 0

shared_pool_size                     big integer 0

streams_pool_size                    big integer 0

 

SQL> show parameter db_cache_size

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_cache_size                        big integer 0

 

SQL> show parameter statistics_level

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

statistics_level                     string      TYPICAL

 

- 5개의 파라미터 사이즈가 0이고 statistics_level typical인 것을 확인하였다. 현재 이 DB ASMM이 적용 중인 DB입니다.

 

▶ SGA_TARGETSGA_MAX_TARGET을 수정

 

SQL> alter system set sga_max_size=1024m scope=spfile;

System altered.

 

SQL> alter system set sga_target=1024m scope=spfile;

System altered.

 

 

▶DB 재기동

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

 

SQL> startup

ORACLE instance started.

Total System Global Area 1073741824 bytes

Fixed Size                  2101808 bytes

Variable Size             264244688 bytes

Database Buffers          801112064 bytes

Redo Buffers                6283264 bytes

Database mounted.

Database opened.

 

SQL> show parameter sga

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

lock_sga                             boolean     FALSE

pre_page_sga                         boolean     FALSE

sga_max_size                         big integer 1G

sga_target                           big integer 1G

 

- sga의 영역이 1024M 1G로 변경된 것을 확인하였습니다.

 

11g의 메모리 자동관리 방법(SGA+PGA) - AMM

 

▶ AMM(Automatic Memory Management)

- 11g에서 등장한 관리기법. SGA+PGA를 자동으로 관리하는 방식

 

▶ AMM을 사용하기 위한 조건

- MEMORY_MAX_SIZE파라미터를 0 이상의 값으로 지정

- MEMORY_TARGET파라미터를 0 이상의 값으로 지정(MAX_SIZE와 동일하게 지정하는 것을 권장)

- SGA_TARGET이나 PGA_AGGREGATE_TARGET값은 0으로 지정

(만약 지정하면 오라클은 그 값을 최소값으로 인식)

 

테스트

 

현재 사이즈를 확인

SYS@ysbae> show parameter memory

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

hi_shared_memory_address             integer     0

memory_max_target                    big integer 1584M

memory_target                        big integer 1584M

shared_memory_address                integer     0

 

SYS@ysbae> show parameter pga_

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

pga_aggregate_target                 big integer 0

 

SYS@ysbae> show parameter sga_target

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

sga_target                           big integer 0

 

-현재 1584M로 자동으로 관리중인 것을 확인하였고, 1G로 변경하겠습니다.

 

SYS@ysbae> alter system set memory_max_target = 1G scope=spfile;

System altered.

Elapsed: 00:00:00.00

 

SYS@ysbae> alter system set memory_target = 1G scope=spfile;

System altered.

 

SYS@ysbae> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

 

SYS@ysbae> startup

ORACLE instance started.

 

Total System Global Area 1068937216 bytes

Fixed Size                  2260088 bytes

Variable Size             671089544 bytes

Database Buffers          390070272 bytes

Redo Buffers                5517312 bytes

Database mounted.Database opened.

 

SYS@ysbae> show parameter memory

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

hi_shared_memory_address             integer     0

memory_max_target                    big integer 1G

memory_target                        big integer 1G

shared_memory_address                integer     0

 

파라미터 변경 후 재시작을 통해 변경할 수 있음을 확인하였습니다.

 

-적절한 메모리를 계산하여 사용하여야 하고, 시스템메모리 보다 많은 Memory_target에 메모리를 할당하면 아래와 같은 에러가 발생할 수 있습니다.

ORA-00845: MEMORY_TARGET not supported on this system

반응형

댓글