상세 컨텐츠

본문 제목

[DB 문제풀이] UndoLog, Redo Log의 차이점

Database/MySql

by choiDev 2024. 10. 9. 12:36

본문

  1. UnDo Log를 설명하시오.
    트랜잭션이 수행된 내용을 기록하며 문제가 발생시 트랜잭션을 취소하고 원래 상태로 되돌리는 기능을 담당하는 로그입니다. 
    이는 무결성과 일관성을 보장하는 중요한 기능입니다.
    InnoDB엔진에서는 Undo Log가 아래와 같은 일을 합니다.

    1.1 트랜잭션 롤백 : 트랜잭션이 실행중 실패하거나 사용자가 롤백을 요청한 경우 UndoLog에 저장된 데이터를 이용해 트랜잭션 이전상태로 데이터를 복구합니다.

    1.2 MVCC(Multi-Version Concurrency Control) : Undo Log는 MVCC의 구성요소중 하나입니다. 
    MVCC는 여러 트랜잭션이 동시에 읽고 쓰는 환경에서 일관성을 유지하도록 해줍니다. 트랜잭션이 변경하기 전에 데이터 버전이 Undo Log에 기록되니 다른 트랜잭션에서 이 버전을 참조해 일관성있게 데이터를 읽을 수 있습니다.

    1.3 데이터 복구 : 비정상 종료나 장애가 발생한 경우, 데이터베이스는 Undo Log를 사용해 트랜잭션을 복구하고 일관성을 유지합니다. 커밋되지 않은 트랜잭션 변경 사항을 모두 무시하고 Undo Log를 이용해 데이터를 복구합니다.
  2. Redo Log를 설명하시오.
    Undo Log와 동일하게 트랜잭션 변경사항을 기록하여 시스템 장애나 비정상 종료가 발생했을때 데이터베이스를 복구하는데 사용되는 로그입니다. Undo Log와의 차이로는 Redo Log는 데이터베이스의 재실행을 위한 로그로서, 트랜잭션이 커밋된 후에도 그 변경사항을 복구할 수 있게 도와줍니다.

    2.1 크래시 복구 : 시스템 장애나 갑작스러운 서버종료가 발생경우, 데이터베이스는 Redo Log를 사용하여 손실된 트랜잭션을 복구합니다. 트랜잭션이 커밋되었지만 실제로 디스크에 반영되지 않았을 수 이씃ㅂ니다. 이때 Redo Log를 사용해 손실된 트랜잭션을 다시 실행하고 데이터베이스를 일관된 상태로 유지할 수 있습니다.

    2.2 WAL(Write-Ahead Logging) :InnoDB는 WAL메커니즘을 사용하는데 이는 트랜잭션의 변경 사항이 실제 데이터 파일에 기록되기 전에 Redo Log에 먼저 기록하는 방식을 의미합니다. 이로 인해 트랜잭션이 커밋될 때, 디스크에 기록되지 않더라도 Redo Log를 통해 해당 트랜잭션을 복구할 수 있게 됩니다. 

    2.3 성능 향상: 데이터베이스는 모든 변경 사항을 즉시 디스크에 기록하지 않고, 메모리에 캐싱한뒤 일정시간마다 기록하는 방식으로 성능을 최적화합니다. 그동안 발생한 트랜잭션의 변경 사항은 Redo Log에 기록됩니다. 이 덕부넹 디스크I/O를 줄이고 성능을 개선할수 있습니다.

    2.4 커밋된 트랜잭션 보장: Redo Log는 커밋된 트랜잭션을 영구적으로 저장합니다. 따라서 데이터베이스가 장애에서 복구할 때 트랜잭션이 커밋된 상태였다면 그 변경 사항이 유실 되지 않도록 보장합니다. 

  3. Undo Log와 Redo Log의 차이점을 설명하세요. 각각의 로그가 트랜잭션 처리에서 어떻게 사용되는지 설명해보세요.
    UnDo Log와 Redo Log는 데이터베이스에서 트랜잭션의 무결성과 일관성을 보장하기 위해 Undo는 롤백을 위해 Redo는 재실행과 복구를 위해 존재하지만 이 둘은 상호 보완적으로 작동하며 데이터의 복구와 일관성 유지에 중요한 역할을 합니다 .

    상호작용 방식
    3.1 트랜잭션 시작 및 데이터 변경 
     - 트랜잭션이 시작되면, 데이터베이스 변경하려는 데이터를 메모리에 로드하고 이 변경전 상태를 Undo Log에 기록합니다. 
     - 변경 후의 데이터는 Redo Log에 기록되지만 실제 데이터 파일에 즉시 반영되지는 않습니다.

    3.2 트랜잭션 커밋 
      - 트랜잭션이 성공적으로 완료되면, 데이터베이스는 트랜잭션이 변경한 내용을 디스크에 반영해야합니다. 이때 RedoLog에 기록된 내용이 커밋되었음을 보장하고, 트랜잭션이 영구적으로 저장됩니다. 
      - 트랜잭션이 커밋된 후에도 실제 데이터 파일에 즉시 기록되지 않더라도, Redo Log덕분에 데이터 손실 없이 복구할 수 있습니다.

    3.3 정상적인 롤백 (Undo Log의 역할) 
      - 트랜잭션이 커밋되지 전에 실패하거나 오류가 발생하면, Undo Log에 기록된 변경 전 상태를 참고하여 해당 트랜잭션이 수정했던 원래 상태로 되돌립니다. 

    3.4 크래시 복구(Redo Log의 역할) 
      - 시스템 장애로 인해 비정상 종료되었을 경우, Redo Log를 통해 데이터베이스는 복구가능하며, 
    장애 발생 시점에 커밋된 트랜잭션의 변경 사항이 디스크에 반여오디지 않았더라도, Redo Log에 기록된 내용을 기반으로 트랜잭션을 다시 실행하여 복구합니다.

      - 이때 Undo Log와 상호작용하여 복구 과정 중 커밋되지 않은 트랜잭션은 Undo Log를 통해 롤백합니다. 커밋된 트랜잭션만 Redo Log에 의해 재실행되고, 커밋되지 않은 트랜잭션은 Undo Log로 되돌려지기 때문에 일관성이 유지 됩니다.