트랜잭션

 

데이터 동시 접근의 문제

동일 데이터에 다수 사용자의 접근 허용 시 일관성이 훼손

트랜잭션

트랜잭션 개념

  1. 데이터베이스를 조작하기 위한 하나의 논리적 단위를 이루는 일련의 연산의 집합
  2. 데이터베이스를 사용하여 처리하는 작업을 하나의 묶음으로 인식하여 묶음 단위로 실행되도록 정의한 개념

트랜잭션의 특징

  1. 다수의 연산으로 구성된 트랜잭션이 사용자에게 단일작업처럼 다뤄지도록 ACID 특징을 준수
  2. ACID 특성
    • 원자성(atomicity): 하나의 트랜잭션에 포함된 모든 연산은 완전히 수행되거나 전혀 수행되지 않음
    • 일관성(consistency): 특정 트랜잭션이 수행되기 전과 후에 데이터베이스가 일관된 상태를 유지
    • 고립성(isolation): 특정 트랜잭션이 데이터베이스를 갱신하는 동안 다른 트랜잭션에 의해 방해받지 않음
    • 지속성(durability): 완료된 트랜잭션의 결과는 어떠한 시스템의 장애에도 데이터베이스에 반영되어야 함

트랜잭션 연산자

  1. 트랜잭션의 연산
    • Read(X): 데이터베이스에서 데이터 X를 읽고, 트랜잭션이 실행되는 메모리의 변수 X에 값을 저장하는 연산
    • Write(X): 트랜잭션이 실행되는 메모리에 있는 변수 X의 값을 데이터베이스에 저장하는 연산
  2. 트랜잭션 실행의 연산
    • Commit: 트랜잭션 연산에 의해 갱신된 데이터 항목의 값을 데이터베이스에 반영시키고 지속성을 확보하는 연산
    • Rollback: 트랜잭션이 중단되기 이전까지 수행한 연산에 의해 갱신된 모든 데이터 항목의 값을 무효화하여 일관성을 확보하는 연산

트랜잭션의 5가지 상태 변화

  1. 동작: 트랜잭션이 시작을 준비 또는 실행 중인 상태
  2. 부분 커밋: 마지막 연산을 실행한 직후의 상태
  3. 커밋: 모든 실행이 성공적으로 완료된 후의 상태
  4. 실패: 실행이 정상적으로 진행될 수 없는 상태
  5. 중단: 실행 실패로 롤백되고 시작 이전의 상태로 환원된 상태

동시성 고려

  • DBMS는 다수의 사용자가 데이터베이스를 공용으로 사용하기 위한 목적으로 도입
  • 트랜잭션 동시 실행의 이점
    • 트랜잭션 처리율과 자원 이용률을 향상
    • 트랜잭션의 대기 시간을 감소
  • 다중 사용자 환경에서 트랜잭션의 동시 실행으로 데이터 갱신 시, 일관성 훼손 문제가 발생
  • 동시성 제어(concurrency control): 다수의 트랜잭션이 성공적으로 동시에 실행되어도 일관성을 유지할 수 있도록 지원하는 기법

스케줄(Schedule)

  • 여러 트랜잭션들이 동시에 실행될 때, 각 트랜잭션에 속한 operation들의 실행 순서
  • 각 트랜잭션들의 operations의 순서는 변화지 않는다.
  • serial schedule (직렬)
    • 트랜잭션들이 겹치지 않고 한 번에 하나씩 실행되는 스케줄
    • 한 번에 하나의 트랜잭션만 실행되기 때문에 좋은 성능을 낼 수 없고 현실적으로 사용할 수 없는 방식
  • non serial schedule (병렬)
    • 트랜잭션들이 겹쳐서 실행
    • 트랜잭션들이 겹쳐서 실행되기 때문에 동시성이 높아져서 같은 시간동안 더 많은 트랜잭션들을 처리할 수 있다.

직렬 가능 스케줄의 정의

  1. 트랜잭션 간 연산 순서를 교환하여 트랜잭션을 직렬 스케줄과 동등하게 변환이 가능한 스케줄
  2. 사용된 Read와 Write 연산 교환 시 상황에 따라 실행 결과에 일관성이 훼손되는 현상(충돌)이 발생
  3. 연산 순서의 교환

충돌 동등

  • 특정 스케줄 S에서 충돌이 일어나지 않는 연산의 순서를 바꿔 스케줄 S`으로 변환이 가능한 상태

충돌 직렬성

  • 순서 교환이 가능한 연산을 교환하여 직렬 스케줄의 연산과 동등하게 변환이 가능한 스케줄

트랜잭션의 회복

회복의 개념

  1. 원자성을 보장하기 위해 트랜잭션 실패 시 실행된 모든 연산을 실행 이전 상태로 복원하는 기법
  2. 회복 불가능한 스케줄
    • 스케줄 내에서 커밋된 트랜잭션이 rollback 된 트랜잭션이 write 했었던 데이터를 읽은 경우
    • rollback을 해도 이전 상태로 회복 불가능할 수 있기 때문에 DBMS에서 허용하면 안된다.
  3. 회복 가능한 스케줄
    • 스케줄 내에서 어떤 트랜잭션도 자신이 읽은 데이터를 write 한 트랜잭션이 먼저 commit/rollback 되기전까지는 commit 하지 않은 경우
  4. 비연쇄적 스케줄
    • cascading rollback: 하나의 트랜잭션이 롤백하면 의존성 있는 다른 트랜잭션도 롤백 되어야 한다.
    • cascading schedule: 스케줄 내에서 어떤 트랜잭션도 commit 되지 않은 트랜잭션들이 write 을 하지 않은 경우