본문 바로가기

CS/DB

[DB 스터디 5주차] 트랜잭션, 회복

목차

    DB세션

    • 데이터베이스 접속을 시작으로, 여러 작업을 수행한 후 접속 종료까지의 전체 기간
    • 세션 내부에는 하나 이상의 트랜잭션이 존재할 수 있음
    • 일반적으로 데이터베이스는 여러 곳에서 동시에 접근이 가능하기 때문에 많은 세션이 동시에 연결될수 있음
    • 세션은 데이터가 변경, 삭제가 확정될때까지 해당 데이터 조작을 분리처리함으로써 데이터와 테이블과의 관계를 보존하는 역할을 함

    트랜잭션

    • 데이터베이스에서 수행되는 하나 이상의 작업을 하나의 논리적 단위로 묶어, 일련의 데이터베이스 조작을 원자적으로 실행하는 개념

    트랜잭션의 특징

    Atomicity (원자성)

    • 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장한다.

    Consistency (일관성)

    • 트랜잭션이 실행되기 전과 실행된 후에 데이터베이스는 일관된 상태여야 한다.

    Isolation (격리)

    • 격리는 여러 트랜잭션이 동시에 실행될 때 각 트랜잭션은 서로에게 영향을 미치지 않아야 한다.

    Durability (지속성)

    • 트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 저장되어야 한다.

    트랜잭션 명령어

    Commit

    • 트랜잭션을 완료하고 트랜잭션에서 수행된 모든 데이터 변경을 영구적으로 데이터베이스에 저장하는 작업

    Rollback

    • 트랜잭션의 변경 사항을 취소하고 트랜잭션을 이전 상태로 되돌리는 작업

    Auto Commit

    • 데이터 변경 작업에 대한 SQL문이 자동으로 커밋되어 데이터베이스에 즉시 영구적으로 반영되는 작업

    트랜잭션 격리 수준

    • 여러 트랜잭션이 동시에 처리될 때, 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 여부를 결정하는 것

    READ UNCOMMITTIED

    • 가장 낮은 격리 수준으로, 트랜잭션은 다른 트랜잭션에서 아직 커밋되지 않은 데이터를 읽을 수 있음

    READ UNCOMMITTIED

    • 트랜잭션은 다른 트랜잭션에서 커밋된 데이터만 읽을 수 있음

    REPEATABLE READ

    • READ COMMITTED 레벨과 다르게 처음 생성된 스냅샷을 통해 일관된 읽기 결과를 보장

    SERIALIZABLE

    • 가장 높은 격리 수준
    • 동시성을 완전히 제한하여 트랜잭션 간에 상호작용이 없음
    • 모든 트랜잭션을 순차적으로 실행하는 것과 같아서 가장 높은 수준으로 데이터 일관성을 보장하지만 성능 문제가 발생할 수 있음

    DB 동시성 제어

    • 동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법

    갱신 손실 문제

    • 두 개의 트랜잭션이 하나의 데이터를 동시에 갱신할 때 발생하는 문제

    DB Lock

    • 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상

    DB Lock 종류

    • 공유 락(Shared Lock)
    • 베타 락(Exclusive Lock)
    • 업데이트 락(Update Lock)
    • 내재 락(Intent Lock)

    DB 데드락(교착상태)

    • 두 개 이상의 트랜잭션이 다른 트랜잭션의 잠금을 기다리면서 진행하지 못하는 상태

    DB 회복

    • 데이터베이스를 장애가 발생했던 이전의 상태로 복구시켜서 일관된 데이터베이스 상태를 만드는 것

    REDO와 UNDO을 통해 복구(회복) 수행

    REDO (재실행)

    • REDO는 장애가 발생 후 로그 파일에 트랜잭션의 시작(START)이 있고 종료(COMMIT)이 있는 경우 트랜잭션의 작업을 재실행하는 과정

     

    UNDO (취소)

    • UNDO는 장애가 발생 후 로그 파일에 트랜잭션의 시작(START)만 있고 종료(COMMIT)이 없는 경우 해당 트랜잭션이 작업한 변경 내용을 원상복구시키는 과정

     

    회복 기법

    로그 기반 회복 기법

    • 지연갱신
    • 즉시갱신

    체크포인트 회복 기법

    • 장애 발생 시 체크포인트 이전에 처리된 트랜잭션은 회복에서 제외하고 체크포인트 이후에 처리된 트랜잭션은 회복 작업 수행하는 기법

     

    그림자페이징 회복 기법

    • 트랜젝션 수행 중 현재 페이지 테이블과 그림자 페이지 테이블을 운용하며, 현재 페이지 테이블을 우선 갱신하고 트랜잭션 종료 시 그림자 페이지 테이블 갱신

    참고자료

    https://mangkyu.tistory.com/299#recentEntries
    https://tecoble.techcourse.co.kr/post/2022-11-07-mysql-isolation/
    https://velog.io/@ha0kim/%EB%8F%99%EC%8B%9C%EC%84%B1-%EC%A0%9C%EC%96%B4
    https://mangkyu.tistory.com/30

    https://velog.io/@dlfrlwkd/CS%EC%8A%A4%ED%84%B0%EB%94%945-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%ED%8A%B8%EB%9E%9C%EC%9E%AD%EC%85%98%ED%9A%8C%EB%B3%B5