■ ASMM(Automatic Shared Memory Management) (10g)
- SGA_TARGET 값을 설정하면 SGA 영역을 자동관리한다.
- SGA_TARGET 값은 SGA_MAX_SIZE 값보다는 작거나 같게 설정하면 된다.
- SGA_TARGET 값은 db 운영중에 조정을 할 수 있다.
- MMAN이 Memory Advisor 사용하여 작동한다.
- spfile을 사용 권한
자동관리영역
shared pool
large pool
java pool
data buffer cache defualt 공간
SQL> show parameter sga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 680M
sga_target big integer 0 -- (11g,자동관리 설정 중)
...
SELECT * FROM v$parameter WHERE name in ('sga_target', 'sga_max_size');
SELECT * FROM v$sga_dynamic_components;
last_oper_type :
SHRINK 줄이다
GROW 늘리다
STATIC 고정
[oracle@oracle ~]$ ps -ef | grep ora_mman
oracle 17556 1 0 11:54 ? 00:00:01 ora_mman_ora11g
- SGA_TARGET 설정되어 있더라도 수동으로 관리해야하는 SGA 영역
- DB_KEEP_CACHE_SIZE
- DB_RECYCLE_CACHE_SIZE
- DB_nK_CASHE_SIZE (n=2,4,8,16,32)
- LOG_BUFFER
- SGA_TARGET 설정되어 있더라도 수동으로 동적 SGA 파라미터의 크기 조정
- 새로운 값이 현재 크기보다 큰 경우 즉시 구성 요소 크기로 조정된다.
- 새로운 값이 현재 크기보다 작은 경우 최소크기가 변경된다.
- 현재보다 줄이고 싶다면 수동 0설정-> 수동 값 설정 하여 기준을 조정
■ PGA(Program Global Area)
- 서버프로세스 또는 백그라운드 프로세스의 데이터 및 제어 정보를 포함하고있는 메모리 영역
- PGA는 서버프로세스 또는 백그라운드 프로세스를 시작할 때 오라클 데이터베이스에서 생성되는 비공유메모리
- PGA 영역에 있는 SQL 작업영역 관리는 8i까지는 수동관리
- sort_area_size (정렬)
- hash_area_size (hash group by, hash join)
- bitmap_merge_area_size (0과 1로 인덱스 만들때 사용)
- create_bitmap_area_size (0과 1로 인덱스 만들때 사용)
SQL> show parameter area
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
bitmap_merge_area_size integer 1048576
create_bitmap_area_size integer 8388608
hash_area_size integer 2097152
sort_area_retained_size integer 0
sort_area_size integer 1048576
workarea_size_policy string AUTO
SELECT * FROM v$parameter WHERE name in ('sort_area_size',
'hash_area_size',
'bitmap_merge_area_size',
'create_bitmap_area_size');
■ 자동 PGA 메모리 관리 (9i)
- pga_aggregate_target 파라미터 기반으로 SQL 작업영역에 할당되는 PGA 메모리 양이 동적으로 조정된다.
- sort_area_size
- hash_area_size
- bitmap_merge_area_size
- create_bitmap_area_size
- workarea_size_policy = Auto로 되어 있으면 자동 PGA 메모리 관리
SQL> show parameter workarea
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy string AUTO
SQL> show parameter pga
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target big integer 0
>> 0지만 0이 아니다. 값이 있다. 11g 버전
SELECT * FROM v$parameter WHERE name in ('sort_area_size',
'hash_area_size',
'bitmap_merge_area_size',
'create_bitmap_area_size',
'workarea_size_policy');
- PGA 수동관리
ALTER SYSTEM SET workarea_size_policy = MANUAL;
- PGA 세션 레벨에서 수동관리
ALTER SESSION SET workarea_size_policy = MANUAL;
ALTER SESSION SET sort_area_size = 1M;
■ AMM (Automatic Memory Menagement) (11g)
- AMM 기능은 PGA 및 SGA의 크기조정을 작업로드에 따라 자동으로 수행한다.
- AMM 기능을 사용하려면 memory_target 값을 설정해야 한다.
- 오라클이 사용할 수 있는 최대 메모리 설정은 memory_max_target 값으로 설정하면 된다.
SQL> show parameter target
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
memory_target big integer 680M
memory_max_target big integer 680M -- 여유있게 활용
pga_aggregate_target big integer 0
sga_target big integer 0
...
# 자동관리
SELECT * FROM v$parameter WHERE name in ('sort_area_size', -- PGA 영역
'hash_area_size',
'bitmap_merge_area_size',
'create_bitmap_area_size',
'workarea_size_policy',
'pga_aggregate_target',
'shared_pool_size', -- SGA 영역
'db_cache_size',
'large_pool_size',
'java_pool_size',
'streams_pool_size',
'sga_max_size',
'sga_target',
'memory_target', -- PGA + SGA
'memory_max_target');
# 무조건 수동관리
SELECT * FROM v$parameter WHERE name in ('db_keep_cache_size',
'db_recycle_cache_size',
'db_2k_cache_size',
'db_4k_cache_size',
'db_8k_cache_size',
'db_16k_cache_size',
'db_32k_cache_size',
'log_buffer');
- memory_target 값이 설정되어 있더라도 sga_target, pga_aggregate_target 을 수동으로 설정할 수 있다.
- memory_target 값을 설정하면 기본적으로 SGA(60%), PGA(40%)
# 현재 메모리 구성 요소
SELECT * FROM v$memory_dynamic_components;
# 지금까지 발생한 resize 작업에 대한 정보
SELECT * FROM v$memory_resize_ops;
# 현재 메모리 크기조정 작업 진행 상황
SELECT * FROM v$memory_current_resize_ops;
■ Background Process ■
- DBWn (Database Writer)
- LGWR (Log Writer)
- CKPT (Checkpoint process)
- SMON (System Monitor)
- PMON (Process Minitor)
...
■ DBWn (Database Writer)
- data buffer cache에 내용을 데이터 파일에 기록한다.
- data buffer cache에 있는 수정된 (dirty) buffer를 데이터 파일에 기록한다.
- dbwr 작동되는 시점
- free buffer를 찾지 못했을 경우(free buffer wait event)
- checkpoint event 발생할 때
SQL> ! ps -ef | grep ora_dbw
oracle 17558 1 0 11:54 ? 00:00:03 ora_dbw0_ora11g
...
SQL> show parameter db_writer_processes
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
db_writer_processes integer 1
# 다중화 설정 (TEST)
SELECT * FROM v$parameter WHERE name = 'db_writer_processes'; ALTER SYSTEM SET db_writer_processes = 2 scope = spfile; SQL> shutdown immediate SQL> startup SQL> ! ps -ef | grep dbw oracle 2511 1 0 00:00 ? 00:00:00 ora_dbw0_ora11g oracle 2513 1 0 00:00 ? 00:00:00 ora_dbw1_ora11g SQL> show parameter db_writer_processes NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ db_writer_processes integer 2 SELECT * FROM v$parameter WHERE name = 'db_writer_processes'; |
■ LGWR (Log Writer)
- Redo log buffer에 있는 redo entry를 redo log file에 기록한다.
- LGWR 작동 시점
- commit 수행할 경우
- redo log buffer가 1/3 찼을 경우
- 1MB 이상의 redo entry가 들어오면
- 3초마다
- DBWR 가 기록하기 전에
SQL> ! ps -ef | grep lgwr
oracle 2515 1 0 00:00 ? 00:00:00 ora_lgwr_ora11g
...
SELECT * FROM v$logfile; ---> control file에서 관리
SELECT * FROM v$log; ---> control file에서 관리
■ CKPT (Checkpoint process)
- checkpoint event 발생시점에 DBWR에 알려준다.
- checkpoint 정보를 데이터 파일 헤더를 갱신
- checkpoint 정보를 컨트롤 파일 갱신
■ checkpoint
- data buffer cache에 있는 dirty buffer (block) (수정된 블록)을 정기적을 디스크에 기록하므로 시스템이나 데이터베이스에 failure가 발생한 경우 데이터가 손실되지 않도록 한다.
- instance recorvery에 필요한 시간을 줄인다. 즉 마지막 체크포인트 다음에 나오는 리두 로그파일에 redo entry에 대해서만 recovery를 수행하면 된다.
- 체크포인트 정보에는 체크포인트 시간, SCN, recovery를 시작할 리두로그 파일의 위치, 로그에 대한 정보를 가지고 있다.
- 체크포인트가 발생하는 경우
shutdown normal | transactional | immediate
ALTER SYSTEM CHECKPOINT; -- 수동으로 checkpoint 발생
ALTER TABLESPACE user OFFLINE NORMAL;
ALTER TABLESPACE user READ ONLY;
ALTER TABLESPACE user BEGIN BACKUP;
ALTER TABLESPACE user END BACKUP;
DROP TABLE hr.emp;
TRUNCATE TABLE hr.emp;
paralle query (SELECT /*+ full(e) paralle(e, 2) */ from hr.emp e;
log switch 발생 시(ALTER SYSTEM SWITCH LOG FILE;)
fast_start_mttr_target을 설정한 경우
# log_checkpoints_to_alert = TRUE 설정을하면 체크포인트 정보를 alert_SID.log에 기록한다.
SQL> show parameter log_checkpoints_to_alert
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
log_checkpoints_to_alert boolean FALSE
SQL> ! ps -ef | grep ckpt
oracle 8965 1 0 01:32 ? 00:00:00 ora_ckpt_ora11g
■ SMON (System Monitor)
- Instance recovery(Instance fail 시 인스턴스 복구하는 역할)
- coalesces free space(디스크 조각 모음)
- 임시 블록 세그먼트들을 재사용할 수 있도록 하는 역할
SQL> ! ps -ef | grep smon
oracle 8967 1 0 01:32 ? 00:00:00 ora_smon_ora11g
■ PMON (Process Minitor)
- user process가 실패할 경우 프로세스 recovery 수행
- 데이터버퍼캐시 정리
- 사용하고있는 리소스 해지
- 트랜잭션에 대해서 자동 rollback
- lock 해제
- listener에게 db정보를 등록시키는 작업을 수행
SQL> ! ps -ef | grep pmon
oracle 8940 1 0 01:32 ? 00:00:00 ora_pmon_ora11g
■ Control file
- 작은 binary file
- database 이름, 식별자, 생성시간
- data file, redo log file 이름, 위치 정보
- 현재 online redo log file의 sequence 번호
- checkpoint 정보, scn 정보
- backup
- archivelog mode, noarchivelog mode (운영중에는 카피(백업)불가)
- control file은 다중화 하자.
- mount 단계에서 실행, 초기 파라미터에서 관리
SELECT * FROM v$database;
SELECT * FROM v$parameter WHERE name = 'control_files';
SQL> show parameter control_file
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
control_files string /u01/app/oracle/oradata/ora11g/control01.ctl,
/u01/app/oracle/fast_recovery_area/ora11g/control02.ctl
# db 정상작동 체크
SQL> show sga
SELECT * FROM v$database;
SELECT * FROM v$instance;
# control file 다중화 (TEST)
초기 파라미터 파일이 서버 파라미터 파일로 운영하고있다. (SPFILE) SQL> show parameter spfile NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ spfile string /u01/app/oracle/product/11.2.0.4/db_1/dbs/spfileora11g.ora [oracle@oracle dbs]$ cat spfileora11g.ora ... *.control_files='/u01/app/oracle/oradata/ora11g/control01.ctl','/u01/app/oracle/fast_recovery_area/ora11g/control02.ctl' ... SQL> show parameter control_file NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /u01/app/oracle/oradata/ora11g/control01.ctl, /u01/app/oracle/fast_recovery_area/ora11g/control02.ctl 1. sqldeveloper에서 실행 ALTER SYSTEM SET control_files = '/u01/app/oracle/oradata/ora11g/control01.ctl', '/u01/app/oracle/fast_recovery_area/ora11g/control02.ctl', '/home/oracle/backup/control03.ctl' SCOPE=SPFILE; 2. 데이터베이스를 정상적인 종료☆ SQL> shutdown immediate SQL> ! 3. 기존 control file을 다른 위치에 복사 [oracle@oracle ~]$ cp -v /u01/app/oracle/oradata/ora11g/control01.ctl /home/oracle/backup/control03.ctl 4. 오라클로 접속한 후 db 시작 SQL> startup SQL> show parameter control_file NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ control_file_record_keep_time integer 7 control_files string /u01/app/oracle/oradata/ora11g/control01.ctl, /u01/app/oracle/fast_recovery_area/ora11g/control02.ctl, /home/oracle/backup/control03.ctl >>> 백업해둔게 없기 때문에 control file 고장나면 DB 재설치해야한다. |
'Oracle 11g > Oracle DB' 카테고리의 다른 글
48 ORACLE ASSM, Tablespace, Undo (0) | 2023.12.14 |
---|---|
47 ORACLE Redo Log File, Tablespace, FLM (0) | 2023.12.13 |
45 ORACLE Parameter, Pfile, SGA, Redo Log Buffer (1) | 2023.12.11 |
44 ORACLE Listener, Alert Log File, Startup, Shutdown (2) | 2023.12.08 |
43 ORACLE OS, DB Install (1) | 2023.12.07 |