오라클 성능 고도화 원리와 해법 I (2012년)
Redo 0 0 99,999+

by 구루비스터디 Redo [2018.03.20]


  1. 04 REDO
    1. REDO Log
    2. REDO 로그 목적
    3. Database Recovery
    4. Cache Recovery
    5. Fast Commit
    6. Delayed 블록 클린아웃 (Clean out)
    7. LGWR이 REDO 로그버퍼를 Redo에 기록하는 시점
    8. Write Ahead Logging
    9. LogFileSync 대기 이벤트
    10. Redo 관련된 Parameter 및 옵션


04 REDO

REDO Log
  • Online redo log
  • Archive redo log


REDO 로그 목적
  1. Database Recovery
  2. Cache Recovery
  3. Fast Commit


Database Recovery
  • 물리적으로 Database 가 손상되었을 경우 복구하게 되며, 이 부분은 백업부분을 restore 한 뒤에 장애가 나기전 시점, 혹은 원하는 시점까지 recovery 하는 부분.
  • Media recovery 라고 하며 이 경우 주로 Archive log 를 이용한다.


Cache Recovery
  • Instance 가 비정상 적으로 종료되고 재기동 하면 Online Redo 로그에 저장된 기록을 읽어들어 마지막 체크포인트이후 부터 사고 직전까지 수행되었던 트랜잭션을 재현한다.
  • Roll forward 단계라고 치며, 버퍼캐시에만 수정하고 데이터파일에는 반영되지 않았던 변경사항들이 복구된다, 여기서는 트랜잭션 Commit 여부를 확인하지 않는다.
  • 이후 Transaction Recovery 가 시작되며, 여기서 UNDO 데이터를 이용한 Commit 여부를 체크한다.
  • 시스템이 비정상 종료 되는 시점에 Commit되지 않았던 트랜잭션을 모두 Rollback 진행하여 데이터파일에는 커밋에 성공한 데이터만 남게 되며, 데이터베이스는 완전히 동기화 됩니다.


Fast Commit
  • 사용자의 갱신사항을 메모리의 버퍼블록에만 기록한 채 아직 디스크에 기록되지 않았지만 Redo 로그를 믿고 빠르게 커밋한다고 의미에서 Fast Commit 이라고 부른다.
Delayed 블록 클린아웃 (Clean out)
  • 오라클 경우 별도의 Lock 메이저 없이 레코드 속성으로 Lock을 구현하였기 때문에 Lock을 해재할라면 블록을 일일이 찾아다녀야 됨으로 커밋 시점에는 Undo 세그먼트 헤더의 트랜잭션 테이블에만 커밋 정보를 기록하고, 블록 클린아웃은 나중에 수행하도록 한다.


LGWR이 REDO 로그버퍼를 Redo에 기록하는 시점
  • 3초마다 DBWR 프로세스로부터 신호를 받을 때
  • 로그 버퍼의 1/3 이 차거나 기록된 REDO 레코드량이 1MB 가 넘을 때
  • 사용자가 커밋 또는 롤백명령을 날릴 때


Write Ahead Logging
  • Buffer Cache 에 있는 블록버퍼를 갱신하기전에 먼저 Redo buffer 에 기록.
  • (LGWR) Redo log buffer 기록되어 있는 해당 redo 엔트리를 모두 redo log file 에 기록 후에
  • (DBWR) Buffer Cache 에 있는 Dirty 블록들을 디스크에 갱신할 수 있다.


LogFileSync 대기 이벤트
  • LGWR 프로세스가 Redo 로그 버퍼의 Redo 엔트리를 Redo 로그에 기록 완료 할 때까지 발생 하는 대기 이벤트


Redo 관련된 Parameter 및 옵션
  • nologging : 최소한의 로그는 생성 됨
  • (Data Dictionary 변경 내역, 새로 할당된 Extent 상태 변경(Invalid) 내역)


기본적으로 Nologging 으로 진행되는 부분.
  • direct load (SQL*Loader)
  • direct-load INSERT
  • CREATE TABLE ... AS SELECT
  • CREATE INDEX
  • ALTER TABLE ... MOVE PARTITION
  • ALTER TABLE ... SPLIT PARTITION
  • ALTER INDEX ... SPLIT PARTITION
  • ALTER INDEX ... REBUILD
  • ALTER INDEX ... REBUILD PARTITION
  • INSERT, UPDATE, and DELETE on LOBs in NOCACHE NOLOGGING mode stored out of line


관련된 Parameter
  • COMMIT_LOGGING
  • COMMIT_WAIT
  • COMMIT_POINT_STRENGTH
  • COMMIT_WRITE (The COMMIT_WRITE parameter is deprecated.)


  SQL> select group#, bytes, status from v$log; 
   GROUP#     BYTES      STATUS                    
   ---------- ---------- ----------------                      
            1    1048576 INACTIVE                        
            2    1048576 CURRENT                          
            3    1048576 ACTIVE


코어 오라클 데이터베이스 스터디 모임 에서 2012년에 오라클 성능 고도화 원리와 해법 I 도서를 스터디하면서 정리한 내용 입니다.

- 강좌 URL : http://www.gurubee.net/lecture/3068

- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^

- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입