ABOUT ME

Today
Yesterday
Total
  • MVCC (Multi-Version Concurrency Control)와 언두 로그(Undo Log), 리두 로그(Redo Log)
    Database 2024. 8. 6. 10:53
    1. MVCC (Multi-Version Concurrency Control)

    MVCC는 다중 버전 동시성 제어 기법으로, 데이터베이스 관리 시스템(DBMS)에서 동시성을 제어하기 위한 기술입니다. 이는 데이터베이스의 일관성과 무결성을 유지하면서 동시에 여러 트랜잭션을 지원하는 방법입니다. MVCC는 일반적으로 다음과 같은 방식으로 작동합니다.

    • 버전 관리: 각 데이터 항목은 여러 버전을 가질 수 있습니다. 새로운 트랜잭션이 데이터 항목을 변경할 때마다 새로운 버전을 생성합니다.
    • 스냅샷 읽기: 각 트랜잭션은 자신의 시작 시점의 데이터베이스 스냅샷을 사용합니다. 즉, 트랜잭션은 자신이 시작된 시점에 존재했던 데이터 버전만을 읽습니다.
    • 쓰기 시점 충돌 방지: 두 트랜잭션이 동일한 데이터 항목을 동시에 변경하려고 할 때, 하나의 트랜잭션만이 성공할 수 있습니다. 실패한 트랜잭션은 롤백됩니다.

    2. 언두 로그(Undo Log)

    언두 로그는 트랜잭션의 원자성을 보장하기 위한 로그입니다. 언두 로그는 트랜잭션이 데이터베이스에서 수행한 변경 사항을 롤백할 수 있도록 이전 값을 기록합니다. 언두 로그는 다음과 같은 작업을 수행합니다.

    • 트랜잭션 시작 시점: 트랜잭션이 시작될 때, 데이터의 현재 값을 언두 로그에 기록합니다.
    • 변경 시점: 데이터가 변경될 때마다, 변경 이전의 값을 언두 로그에 기록합니다.
    • 롤백 시점: 트랜잭션이 실패하거나 명시적으로 롤백될 때, 언두 로그를 사용하여 데이터베이스를 트랜잭션 시작 전 상태로 복원합니다.

    3. 리두 로그(Redo Log)

    리두 로그는 트랜잭션의 영속성을 보장하기 위한 로그입니다. 리두 로그는 데이터베이스에 기록된 변경 사항을 다시 적용할 수 있도록 합니다. 리두 로그는 다음과 같은 작업을 수행합니다.

    • 트랜잭션 커밋 시점: 트랜잭션이 커밋될 때, 리두 로그에 변경 사항을 기록합니다.
    • 시스템 충돌 시점: 시스템 충돌이나 비정상 종료 후, 리두 로그를 사용하여 데이터베이스를 트랜잭션 커밋 상태로 복원합니다. 이는 트랜잭션이 커밋되었지만 데이터베이스에 완전히 적용되지 않은 변경 사항을 다시 적용하는 것을 의미합니다.

    MySQL에서의 구현

    MySQL은 MVCC, 언두 로그, 리두 로그를 사용하여 트랜잭션의 일관성과 무결성을 유지합니다. 다음은 MySQL에서 이러한 개념이 어떻게 구현되는지에 대한 설명입니다.

    MVCC in MySQL

    MySQL에서 MVCC는 InnoDB 스토리지 엔진에 의해 구현됩니다. InnoDB는 각 데이터 행에 두 개의 숨겨진 컬럼을 추가합니다.

    • trx_id: 트랜잭션 ID. 이 행을 마지막으로 변경한 트랜잭션의 ID를 나타냅니다.
    • roll_pointer: 언두 로그 레코드에 대한 포인터입니다. 이는 이전 버전의 행을 참조합니다.

    InnoDB는 이 정보를 사용하여 트랜잭션이 시작될 때의 일관된 스냅샷을 제공합니다.

    Undo Log in MySQL

    InnoDB는 언두 로그를 사용하여 트랜잭션의 원자성을 보장합니다. 트랜잭션이 데이터를 변경할 때마다, 이전 값을 언두 로그에 기록합니다. 트랜잭션이 롤백되면, 언두 로그를 사용하여 이전 상태로 복원합니다.

    Redo Log in MySQL

    InnoDB는 리두 로그를 사용하여 트랜잭션의 영속성을 보장합니다. 트랜잭션이 커밋되면, 변경 사항을 리두 로그에 기록합니다. 시스템 충돌 후, 리두 로그를 사용하여 커밋된 변경 사항을 데이터베이스에 다시 적용합니다.

     

    'Database' 카테고리의 다른 글

    넥스트 키 락(Next-Key Lock) in Database Systems  (0) 2024.08.06
    Phantom Rows  (0) 2024.08.06
    MariaDB Lock(이론)  (0) 2023.04.01
    MariaDB Isolation  (0) 2023.04.01
    MariaDB Lock(실전)  (0) 2023.04.01

    댓글

Designed by Tistory.