- h2. Redo 로그
- h5. Redo 로그 버퍼에 저장된 로그 레코드가 Redo 로그 블록 단위(512 Byte)로 기록되는 파일
- 최소 두 개 이상의 파일로 구성
- 라운드 로빈 방식의 로그 스위칭
- select max(lebsz) from sys.x$kccle; (로그 블록 단위 얻기)
- h2. Redo 로그의 목적
목적 | 설명 |
---|
Database(Media) Recovery | 복구시 Archived Redo 로그 활용 |
Cache(Instance) Recovery | Roll forward / Rollback (Transaction Recovery) |
Fast Commit | Commit 시 데이터 Block 쓰기 대신 Redo 쓰기 활용 |
구분 | 쓰기방법 | 속도 |
---|
Block | Random Access | 느리다 |
Redo 로그 | Append | 빠르다 |
- h5. Delayed Block Cleanout
구분 | 기록내역 |
---|
Undo 세그먼트 헤더의 트랜잭션 테이블 | Transaction Status |
블록 헤더 ITL 슬롯 | 커밋 Flag, 커밋 SCN |
Redo 로그 | Commit Mark |
- h2. Redo 로그 쓰기
- h5. 관련자
- h5. 언제?
- 3초마다 DBWR 프로세스로 부터 신호를 받을때
- 로그 버퍼의 1/3이 차거나 기록된 Redo 레코드가 1MB를 넘을 때
- 사용자가 커밋 또는 롤백 명령을 날릴 때 (Log Force at Commit)
- 커밋 (유저)
- 커밋 레코드를 Redo 로그 버퍼에 기록 (LGWR)
- 트랜잭션 로그 레코드와 함께 Redo 로그에 저장
- 커밋 완료
- h5. Write Ahead Logging
영역 | 선(Redo 엔트리) | → | 후(데이터 블록) |
---|
SGA | Redo 로그 버퍼에 기록 | → | 버퍼캐시의 데이터 블록 갱신 |
디스크 | Redo 로그에 기록(LGWR) | → | Dirty 데이터 블록을 디스크에 기록(DBWR) |
- h5. log file sync
- LGWR 프로세스가 Redo 로그 버퍼의 Redo 엔트리를 Redo 로그에 기록 완료 할 때까지 발생 하는 대기 이벤트
- h2. COMMIT_WRITE (파라미터)
값 | Redo Write | 완료 대기 | 장애극복 | 비고 |
---|
IMMEDIATE, WAIT | 즉각 요청 | 대기 | O | 기본값 |
IMMEDIATE, NOWAIT | 즉각 요청 | 대기 안함 | X | |
BATCH, WAIT | 모아서 요청 | 대기 | X | |
BATCH, NOWAIT | 모아서 요청 | 대기 안함 | X | |
- PL/SQL 의 Asynchronous Commit
- PL/SQL 블록 내의 Commit 은 마치 COMMIT_WRITE(BATCH, NOWAIT) 파라미터를 사용하는것과 같은 효과
- _WAIT_FOR_SYNC = FALSE 시 COMMIT_WRITE(NOWAIT) 효과
- _DISABLE_LOGGING = TRUE 시 Redo 로그에 기록하는것 만 패스 (위험한 파라미터)
- h2. NOLOGGING
- 그래도 Redo 레코드 발생 한다
- Data Dictionary 변경 내역
- 새로 할당된 Extent 상태 변경(Invalid) 내역
참조문서
블로그(오라클 성능 문제에 대한 통찰) : http://ukja.tistory.com/64
위키(엑셈과 만들어가는 오라클 백과사전) : http://wiki.ex-em.com/index.php/Delayed_block_cleanout
서적(오라클 성능 고도화 원리와해법 I) : http://book.daum.net/detail/book.do?bookid=KOR9788996246015