Redo log
Redo log 생성원리
Change Vector
Redo copy latch
Redo allocation latch
LGWR (Log writer)
Redolog 다중화
Redolog 관리하기
Redolog trace
에 대하여 . . .
◈ 리두로그 (Redolog )
< 그림 1 >
1. 리두로그란 ?
위의 그림의 SGA의 Redolog buffer 와 저장소인 Redolog File 의 형태로 있습니다 ~
- Re (다시) do (하다) = 데이터가 변경될 경우 변경 후의 내용을 기록합니다.
- Un (취소) do (하다) = 데이터가 변경될 경우 변경 전의 내용을 기록합니다.
장애가 발생했을 경우 복구 하기 위해 데이터가 변경되지 전의 내용과 변경된 후의 내용을 모두 기록 하는 기능을 하고 있습니다.
redo log buffer : 메모리 , redo log file : 파일
2. 생성 원리
데이터 변경이 발생 (DML,DDL) 하면 두 가지 메커니즘에 의해 Redo Log에 기록된다.
- write log ahead : 실제 데이터 변경 전에 redo log 먼저 기록한 후 데이터가 변경된다.
(DBWR 작동 이전에 LGWR가 작동)
- Log force at Commit : Commit을 치면 내려쓴다.
사용자로부터 commit 요청이 들어오면 관련된 모든 redo recored들을 redo log file에 저장한 후 commit을 완료 (redo log file에 기록하지 않고 Commit은 완료 되지 않은 상태)
<그림 2>
* 리두로그가 생성되는 순서
1. DML이 발생시 버퍼캐시에 락을 걸고 업데이트를 한다.
2. PGA는 Change vector를 생성한다.
3. 리두로그 버퍼에 저장 할 수있는지 레치를 먼저 할당 받는다.
4. 리두로그에 Redo Entry라는 형태로 저장한다.
5. 위 그림의 4가지 상황에 따라 LGWR 프로세스가 Redolog file에 내려쓴다.
+ Archive log 가 있다면 추가 저장한다.
Change vector ?
PGA가 생성하며 변경된 데이터를 나중에 복구할 목적으로 Redo log에 기록할 변경 데이터에 대한 모든 정보의 묶음
- Undo segment header 변경사항
- Undo block 변경사항
- Data segment header 변경사항
- Data block 변경사항
Redo Record Format으로 row 단위로 Redo log Buffer로 복사 된다.
Redo copy Latch ?
Copy 를 위한 번호표 할당 하며 (cpu 개수 * 2) 이며 cpu 가 8개 미만인 경우
레치는 1개이다. 이때 여러개가 다수로 통과 한다.
여기서 경합발생 한다면 --> 성능저하 로 이어진다.
조회 :
select name, gets misses, immediate_gets, wait_time from v$latch_children where name='redo copy'; --copy latch
Redo allocation Latch ?
redolog buffer의 공간확보를 위한 레치 이며 한번에 1개씩만 할당 할 수 있다.
8i 까지는 1개 였지만 9i는 Shared Redo Strand : 하나의 redo log buffer를 마지 디스크의 파티션과 같이 여러 개로 나눠서 작업 할수 있어짐
10g = _LOG_PARALLELISM 오라클 동적관리 되어짐 (권장값 : cpu개수 /8) 개
조회 :
select name, gets misses, immediate_gets, wait_time from v$latch_children where name='redo allocation';
select count(*) from v$latch_children where name='redo allocation';
LGWR(로그 기록자 프로세스, Log Writer)
로그 버퍼의 내용을 메모리로부터 디스크로 복사하는 백그라운드 프로세스
- User process가 트랜잭션을 commit 하거나 rollback 할때
- 리두로그 버퍼가 1/3 찼을 때
- DBWn 프로세스가 수정된 버퍼를 디스크에 기록하기 전에
- 3초 마다
- 1MB 이상의 트랜잭션이 발생 했을 때
Redo log 다중화
Redo log file이 고장나면 문제가 생기므로, 같은 멤버들을 최소한 두개 이상 묶어 한 그룹으로 만들기를 권장한다.
Redo log 관리하기
신규 group 생성하기
alter database add logfile group 4 '/u01/app/oracle/oradata/orcl/redo01.log' size 5m;
Member 추가하기
alter database add logfile member '/u01/app/oracle/oradata/orcl/redo01.log' to group 4;
member 삭제하기
alter database drop logfile member '/u01/app/oracle/oradata/orcl/redo01.log';
group 삭제하기
alter database drop logfile group 4
(그룹에 1개인 멤버를 지우려면 지워지지 않음. 지우려면 그룹을 삭제해야함 )
log switch 발생하기
alter system switch logfile;
checkpoint 발생하기
alter system checkpoint;
redolog file trace
아래의 공감 버튼은 작성자를 춤춰 날뛰게 합니다.
↓↓↓↓
'ORACLE' 카테고리의 다른 글
:) 태영쓰 :: ORACLE 인스턴스 실행단계 SQL>startup (0) | 2017.09.02 |
---|---|
: ) 태영쓰 :: SGA Shared Pool (0) | 2017.07.23 |
: ) 태영쓰 :: 리스너 연결과정 (0) | 2017.07.22 |
: ) 태영쓰 :: 데이터베이스란 ? (0) | 2017.03.15 |
: ) 태영쓰 :: 오라클 JAVA POOL, STREAMS POOL (0) | 2017.03.12 |