[DB] 트랜잭션: ACID, 연산, 장애, 회복

안녕하·2023년 12월 7일
0

데이터베이스

목록 보기
20/21

개념

  • 작업 하나를 수행하는 데 필요한 DB 연산의 논리적 작업 단위
    • DML (SQL) 모음
  • 장애 발생 시 데이터를 복구하는 작업 단위

  • 트랜잭션 → DB 회복과 병행 제어 가능 → DB 일관된 상태 유지


데이터베이스 세션

  • 데이터베이스 접속 시작 ~ 여러 작업 수행 ~ 접속 종료 전까지의 기간

  • 여러 세션이 동시에 연결 가능 + 한 세션에 여러 트랜잭션 가능




트랜잭션의 특성 ACID

  1. Atomicity 원자성
  2. Consistency 일관성
  3. Isolation 격리성
  4. Durability 지속성

ACID는 회복, 병행 제어, 병행 제어, 회복 기능으로 보장한다


1. 원자성 Atomicity

  • all-or-nothing
    • 트랜잭션을 구성하는 모든 연산들이 모두 정상적으로 실행 or 하나라도 실행x
  • 장애가 발생해도 트랜잭션 전의 상태로 복구

  • 회복 기능이 원자성을 보장


2. 일관성 Consistency

  • 트랜잭션이 성공적으로 수행된 후에도 DB가 일관된 상태 유지

  • 트랜잭션 수행 중은 일관되지 않더라도 트랜잭션 수행 전과 후는 일관되어야 함


3. 격리성 Isolation

  • 트랜잭션 commit 전까지는 중간 연산 결과에 접근 불가

  • 여러 트랜잭션이 동시에 수행되지만 각 트랜잭션은 독립적으로 수행


4. 지속성 Durability

  • 트랜잭션 완료 후 반영된 결과는 영구적이어야 함

  • 장애가 발생하더라도 트랜잭션 작업 결과는 손실되지 않고 DB에 남아야 한다

  • 회복 기능이 지속성을 보장




트랜잭션 격리 수준

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

격리 수준은 크게 4가지로 나뉜다 (아래로 갈수록 트랜잭션 간 데이터 격리 정도 증가)

  1. READ UNCOMMITED
  2. READ COMMITED
  3. REPEATABLE READ
  4. SERIALIZABLE



트랜잭션 연산

  1. commit

    • 트랜잭션이 성공적으로 수행됨을 선언 (작업 완료)
    • 트랜잭션의 모든 연산이 정상 처리 → commit → DB에 반영 → 일관성 유지
    • autocommit : 자동으로 명령이 commit하여 즉시 반영
  2. rollback

    • 트랜잭션이 실패했음을 선언 (작업 취소)
    • 트랜잭션 수행 실패 → rollback → 작업 취소 → 트랜잭션 수행 전으로 회복



트랜잭션 상태

  1. 활동 상태
  2. 부분 완료 상태
  3. 완료 상태
  4. 실패 상태
  5. 철회 상태

  • 트랜잭션 시작 → 활동 상태 → 트랜잭션 마지막 연산 처리 → 부분 완료 상태 (DB에 반영 이전)
  • 부분 완료 트랜잭션 → commit → 완료 -> DB 반영 -> 종료
  • 부분 완료 트랜잭션 → rollback → 철회 -> 트랜잭션 수행 전으로 -> 종료



트랜잭션 장애와 회복

장애의 유형

  1. 트랜잭션 장애
    • 트랜잭션 수행 중 오류 발생 → 수행 지속 불가
    • 트랜잭션 논리적 오류, 잘못된 데이터 입력, 시스템 자원 과다 사용 요구, 처리 대상 데이터 부재 등
  1. 시스템 장애
    • HW 결함 → 수행 지속 불가
    • HW 이상으로 메인 메모리의 DB 일부 혹은 전체 손상
  1. 미디어 장애
    • 디스크 장치 결함 → DB 일부 혹은 전체 손상
    • 디스크 헤드 손상

회복 연산

데이터를 미리 복사해두고, 장애가 발생하면 복사본을 이용해 원래 상태로 복원

  1. dump DB 전체를 주기적으로 복사

  2. log DB 변경 연산 실행 시 데이터 변경 이전 값과 이후 값을 파일에 기록


dump와 log로 저장된 데이터로 DB를 복구하는 명령어

  1. redo 재실행, 가장 최근에 저장한 DB 복사본을 가져와 모든 변경 연산을 재실행하여 복구

  2. undo 취소, 로그를 이용해 모든 변경 연산을 취소하여 복구


회복 기법

  • DB 장애 발생 전의 모순이 없고 일관된 상태로 복구
  • DBMS의 회복 관리자가 장애 탐지 → DB 복구

  1. 로그 회복 기법
    • 즉시 갱신 회복 기법
    • 지연 갱신 회복 기법
  1. 검사 시점 회복 기법
    • 로그 회복 기법의 비효율성 보완
    • 가장 최근 체크포인트를 만들어두고, 장애 발생 시 가장 최근 검사 시점 이전의 트랜잭션에는 회복 작업 수행x
    • 불필요한 회복 작업 x, 시간 단축
  1. 미디어 회복 기법
    • DB는 비휘발성인 디스크에 저장됨, 하지만 디스크 헤더 고장으로 장애 발생 가능
    • 디스크 장애 발생 시 일정 주기마다 복사해둔 덤프를 이용하여 복구
    • 전체 DB를 복사 → 큰 비용, cpu 낭비



출처: 데이터베이스 개론, Real MySQL 8.0 (1권)

이미지 출처: gracefulsoul

profile
세요

0개의 댓글