1. LOG_ARCHIVE_DEST_n은 archive log 파일을 최대 10개 까지 서로 다른 Directory 에 분산 시킬 수 있게 함. 
그리고 해당 Directory 가 Local 이 아니고 원격지에 있는 remote 서버도 가능하게 함. 
파라미터 설정 시 'LOCATION= /해당디렉토리' 로 설정함. 

2. LOG_ARCHIVE_DEST 는 과거에 사용하던 파라미터이며 , LOG_ARCHIVE_DUPLEX_DEST와 함께 사용할 경우 최대 2개의 서로 다른 Directory에 archive file을 위치 시킬 수 있음. 단 Local 시스템에만 적용 가능. 

3. 따라서 LOG_ARCHIVE_DEST_n 사용이 보다 권장됨. 만일 LOG_ARCHIVE_DEST 가 설정되어 있으면 아래와 같이 Disable 시킴. 
 
alter system set log_archive_duplex_dest = '';
alter system set log_archive_dest = '';

log_archive_dest_state_n 파라미터도 활성화 되었는지 확인. 비 활성화 되었다면 아래와 같이 enable 시킴

show parameter log_archive_dest_state;

alter system set log_archive_dest_state_1 = enable;
alter system set log_archive_dest_state_2 = enable;

alter system set log_archive_dest_1='location=/dbarch1';
alter system set log_archive_dest_2='location=/dbarch2';

MethodInitialization ParameterHostExample
1LOG_ARCHIVE_DEST_nLocal or remoteLOG_ARCHIVE_DEST_1 = 'LOCATION=/disk1/arc'
where: n is an integer from 1 to 10LOG_ARCHIVE_DEST_2 = 'SERVICE=standby1'
2LOG_ARCHIVE_DEST andLocal onlyLOG_ARCHIVE_DEST = '/disk1/arc'
LOG_ARCHIVE_DUPLEX_DESTLOG_ARCHIVE_DUPLEX_DEST = '/disk2/arc'


4.  아카이브 로그를 이중화 시키되 이중 한 곳은 FRA 를 사용하게 하는 법. 

LOG_ARCHIVE_DEST_1 = 'LOCATION=/arc_dest1'
LOG_ARCHIVE_DEST_2 = 'LOCATION=USE_DB_RECOVERY_FILE_DEST'

Flash Recovery Area ( FRA ) 설정하는 방법


1.  log_archive_dest 와 log_archive_duplex_dest 를 Disable 한다. 
alter system set log_archive_duplex_dest = '';
alter system set log_archive_dest = '';


2. FRA 크기를 db_recovery_file_size로, FRA 디렉토리 위치를 'db_recovery_file_dest' 로 설정한다.  
alter system set db_recovery_file_size = 4G;
alter system set db_recovery_file_dest = '/home/oracle/flasharea';

3. FRA 중에 사용되고 있는 영역 확인

SQL> SELECT * FROM V$RECOVERY_FILE_DEST;

NAME            SPACE_LIMIT SPACE_USED SPACE_RECLAIMABLE NUMBER_OF_FILES
--------------  ----------- ---------- ----------------- ---------------
/mydisk/rcva     5368709120 109240320             256000              28

4. FRA를 차지하고 있는 Object들의 사용 현황

SQL> SELECT * FROM V$FLASH_RECOVERY_AREA_USAGE;

FILE_TYPE    PERCENT_SPACE_USED PERCENT_SPACE_RECLAIMABLE NUMBER_OF_FILES
------------ ------------------ ------------------------- ---------------
CONTROLFILE                   0                         0               0
ONLINELOG                     2                         0              22
ARCHIVELOG                 4.05                      2.01              31
BACKUPPIECE                3.94                      3.86               8
IMAGECOPY                 15.64                     10.43              66
FLASHBACKLOG                .08                         0               1

1. ASMM 정의 

10g 부터 SGA 구성 요소 ( Buffer Pool , Shared Pool , Large Pool , Java Pool) 메모리를 동적으로 조정가능할 수 있게되었으며 이를 ASMM 기능이라 한다. 
원래 Buffer Cache는 db_cache_size , Shared Pool 은 shared_pool_size , Large Pool은 large_pool_size 파라미터를 통해 변경되며 이들 파라미터를 변경하면 Oracle Instance는 재 기동이 되어야 함. 
ASMM은 재 기동없이 이들 메모리 값을 동적으로 변경가능하게 한다.  이를 위해 SGA_TARGET , SGA_MAX_TARGET 이라는 신 파라미터가 도입됨. 

2. ASMM 파라미터 할당
SGA_TARGET은 동적으로 조정될 수 있는 SGA값이며 , SGA_MAX_SIZE는 SGA가 최대로 할당 될 수 있는 값임.
만일 SGA_TARGET=250M , SGA_MAX_SIZE=400M 라면 SGA는 최소 250M부터 할당되어 최대 400M 까지 설정 가능함. 

SGA_TARGET의 경우 운영중 동적으로 변경가능하나 SGA_MAX_SIZE는 운영중 그 값을 변경할 수 없음. 

SGA_TARGET은 ALTER SYSTEM SET SGA_TARGET=400M SCOPE=BOTH 로  SPFILE 과 MEMORY에 동시 적용 가능.
그러나 SGA_MAX_SIZE 는 ALTER SYSTEM SET SGA_MAX_SIZE=500M SCOPE=SPFILE 로 SPFILE 파일에만 변경 적용 가능하며 운영중에는 변경이 불가능함. 

SGA_TARGET은 SGA_MAX_SIZE보다 커질 수 없기때문에 이와 같이 파라미터를  설정할 경우 DB는 기동되지 않음. pfile 을 통해 파라미터를  SGA_TARGET 값을 SGA_MAX_SIZE보다 작게 설정한 후 STARTUP PFILE로 기동 필요. 

SGA_TARGET을 특정값으로 설정하고 DB_CACHE_SIZE,SHARED_POOL_SIZE가 0 으로 설정하면 DB에서 자동으로 이들을 최적화된 값으로 재 설정해 줌.  DB_CACHE_SIZE등의 값이 미리 설정되어 있다면 DB는 최소한 설정된 해당 값이상으로 메모리를 할당함.

만일 DB_CACHE_SIZE + SHARED_POOL_SIZE + LARGE_POOL_SIZE + JAVA_POOL_SIZE 가 SGA_TARGET 또는 SGA_MAX_SIZE보다 크다면 ASMM 값을 무시하고 설정된 DB_CACHE_SIZE , SHARED_POOL_SIZE , LARGE_POOL_SIZE , JAVA_POOL_SIZE 값으로 메모리를 할당함. 

3. AMM 
11g 부터는 기존 SGA메모리 뿐만 아니라 서버 프로세스의 메모리도 동적으로 조정가능할 수 있게 함. 즉 PGA_AGGREGATE_TARGET 까지 합산된 총 메모리 조정. 

이를 위해 MEMORY_TARGET 과 MEMORY_MAX_TARGET 파라미터가 도입됨. 

4. AMM 파라미터 할당 
ASMM과 유사하게 MEMORY_TARGET은 동적으로 조정될 수 있는 메모리 값이며 , MEMORY_MAX_TARGET은 동적으로 최대 할당될 수 있는 메모리 값임.  MEMORY_TARGET=400M , MEMORY_MAX_TARGET=500M로 설정하면 SGA+PGA는 최소 400M에서 최대 500M 까지 변경 가능. 

ASMM과 마찬가지로 MEMORY_TARGET은 운영중 동적으로 변경 가능하나 MEMORY_MAX_TARGET은 운영중 그 값을 변경할 수 없으며 MEMORY_TARGET은 MEMORY_MAX_TARGET보다 반드시 같거나 작아야 함.  만일 MEMORY_TARGET 파라미터를 설정하지 않고 MEMORY_MAX_TARGET 값만 설정할 경우 MEMORY_TARGET은 MEMORY_MAX_TARGET 값과 동일하게 설정됨. 

AMM을 적용할 경우 SGA_TARGET 및 PGA_AGGREGATE_TARGET을 0으로 설정하며 DB가 자동으로 SGA 및 PGA메모리를 할당함. 만일 SGA_TARGET 또는 DB_CACHE_SIZE,SHARED_POOL 등의 파라미터가 설정되어 있으며 대신 이들 파라미터 설정값을 메모리로 할당함. 

SGA_MAX_SIZE + PGA_AGGREGATE_TARGET 이 MEMORY_MAX_SIZE 보다 클 경우 AMM은 무시하고 설정된 SGA_MAX_SIZE, PGA_AGGREGATE_TARGET 값을 사용함. 

특정 테이블의 통계정보가 생성되지 않거나 올바른 통계정보가 수집되지 않았을 경우 SQL 실행계획에 문제가 생길 수 있다. 이 경우 보통은 dbms_stat.gather_table_stat 패키지를 사용하여 통계정보를 실행하여 문제를 해결할 수 있다.


그러나 통계정보를 실행하더라도 실행계획이 바로 반영되지 않아서 SQL 의 실행계획 문제를 여전히 해결하지 못하는 상황이 발생할 수 있다.
오라클 10g 부터는 새롭게 통계정보가 생성되더라도 바로 해당 실행계획에 이를 적용하지 않고 적당한 시점을 찾아서 해당 테이블에 연관된 실행 계획 변경을 적용하기 때문이다. . 

물론 ALTER SYSTEM FLUSH SHARED POOL 명령어를 사용하여 모든 SQL 및 실행계획을 Shared Memory 에서 FLUSH OUT 시켜도 된다. 그러나 이 명령은 업무 시간에 동시접속 프로그램이 수행중인 운영 DB에 적용했다가는 문제를 일으킬 소지가 크기 때문에 함부로 적용할 수는 없다. ( 부하가 없는 경우라면 ok ) 

10g 부터 dbms_stat 패키지에 no_invalidate option이 추가되었는데 이를 잘 활용하면 해당 테이블을 사용하는 SQL 만 새로운 실행계획을 생성할 수 있게 해준다. no_invalidate 가 false 이면 실행계획 변경이 바로 적용되도록 함. 

dbms_stats.gather_table_stat 을 수행하기 이전에 dbms_stat.set_param ( no_invalidate false) 와 같이 수행하거나

또는 exec dbms_stats.gather_table_stat( ...... , no_invalidate => false) 로 호출하면 해당 테이블에 관련된 실행계획이 통계정보 update와 동시에 변경 반영됨. 

 하나의 오라클 세션에 할당할 수 있는 메모리는 PGA_AGGREGATE_TARGET를 통해 설정 가능하다.  주지해야 할 것은 PGA_AGGREGATE_TARGET 값이 한개의 오라클 세션값이 가지는 최대 메모리 크기가 아니라는 것이다. 즉 PGA_AGGREGATE_TARGET을  32GB로 설정하더라도 32G를 하나의 세션이 점유하여 사용하지 않는다. 

 
PGA_AGGREGATE_TARGET 설정값을 기반으로 Real Memory 의 사용값은 hidden parameter로 설정이 되며 , 이 hidden parameter를 통해 실제로 세션이 사용되는 메모리 값이 결정되며 보통 OLTP 세션에서는 최대 사용 가능한 세션 메모리는 PGA_AGGREGATE_TARGET의 5% 정도임.

주요 hidden parameter

1. _pga_max_size : 
  한개의 세션이 PGA영역에서 최대 사용가능한 메모리

  단 Serial Operation일 경우에 적용되며  Parallel Operation일 경우는 _smm_px_max_size를 따른다. 

2. _smm_max_size : 
  한개의 세션이 단일 operation에서 최대 사용 가능한 메모리. 
  
  여기서 단일 Operation 이란 sort 또는 hash join과 같이 PGA를 사용하는 Operation 중 하나라는 뜻임. 즉 _pga_max_size는 PGA내에서 수행하는 모든 Operation 들이   
최대 사용가능한 메모리, _smm_max_size는 단일 Operation이 사용 가능한 메모리임.
9i 이전에는 이런 단일 operation에 대한 max 메모리 설정이 Default 였음. 즉 SORT_AREAR_SIZE , HASH_AREA_SIZE 에 해당됨.

  Parallel Operation 일 경우에는 하나의 PQ가 단일 Operation에서 최대 사용가능한 메모리임. _smm_px_max_size 와 결합하여 PQ시 사용 메모리가 결정됨. 

3. _smm_px_max_size
   PQ 수행 시 DOP가 5 이상일 경우 _smm_px_max_size가 PGA 크기에 영향을 미침.  PQ 처리시 하나의 세션이 최대 사용 가능한 메모리. 

   _smm_px_max_size가 12G 일 경우 _smm_max_size가 1G , DOP 가 100개라면 세션이 차지하는 메모리는 12G로 제한된다. 즉 각 PQ가 가지는 _smm_max_size는 전체 12G를 넘지 않는 정도에서 동적으로 크기가 제한된다. 

4. Hidden parameter 로 해당 파라미터를 조회 할 경우 _smm_max_size 와 _smm_px_max_size는 KB 단위로 보이므로 유의할 것. 

5. 크기 설정
  Default 설정 크기는 아래와 같음 ( 정확하게 아래 룰을 따르는지는 추가 확인 필요 )
   5.1 _pga_max_size 의 경우는 PGA_AGGREGATE_TARGET의 5%가 부여됨. (PGA_AGGREGATE_TARGET의 크기가 매우 커지면 3%정도로 추정됨)
   5.2 _smm_max_size 는 _pga_max_size의 50% 임. 
   5.3 _smm_px_max_size는 PGA_AGGREGATE_TARGET의 50% 가 부여됨. 
   5.4 PGA_AGGREGATE_TARGET을 64G로 설정했을 때 
        _pga_max_size 는 2G, _smm_max_size 는 1G , _smm_px_max_size는 32G로 셋팅됨. 

+ Recent posts