Transaction

이주희·2022년 10월 5일
0

CS

목록 보기
54/66

트랜잭션

데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본단위

1. ACID :: 트랜잭션의 특성 🌟🌟🌟

(1) Atomicity 원자성 🌟🌟🌟

  • 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 한다.
  • All or Nothing: 트랜잭션의 연산 전체가 성공 또는 실패되어야 한다.

(2) Consistency 일관성

  • 시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.

(3) Isolation 격리성 = 고립성

  • 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않아야 한다.

(4) Durabilty 영속성 = 지속성

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

2. 트랜잭션의 상태 변화

(1) 활성 Active

  • 초기 상태, 트랜잭션이 실행 중일 때 가지는 상태

(2) 부분 완료 Partially Committed

  • 마지막 명령문이 실행된 후에 가지는 상태(커밋 전)

(3) 완료 Committed

  • 트랜잭션이 성공적으로 완료된 후에 가지는 상태

(4) 실패 Failed

  • 정상적인 실행이 더이상 진행될 수 없을 때 가지는 상태

(5) 철회 Aborted

  • 트랜잭션이 취소되고 데이터베이스가 트랜잭션 시작 전 상태로 환원된 상태

3. TCL :: 트랜잭션 제어 언어 🌟🌟🌟

Transaction Control Language

트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어

(1) COMMIT

  • 트랜잭션 확정

  • 트랜잭션을 메모리에 영구적으로 저장하는 명령어

(2) ROLLBACK 🌟🌟🌟

  • 트랜잭션 취소

  • 트랜잭션 내역을 저장 무효화시키는 명령어

(3) CHECKPOINT = SAVEPOINT

  • 저장 시기 설정

  • ROLLBACK을 위한 시점을 지정하는 명령어


4. 병행 제어 (일관성 주요 기법)

Concurrency Control

다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호 작용을 제어하는 기법

4-1. 병행 제어 미보장 시 문제점

(1) 갱신 손실 Lost Update

  • 먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류

(2) 현황 파악 오류 Dirty Read

  • 트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류

(3) 모순성 Inconsistency

  • 두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류
    (두 개의 트랜잭션이 섞여버려서 생기는 오류)

(4) 연쇄복귀 Casacading Rollback

  • 복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류

4-2. 병행 제어 기법 🌟🌟🌟

(1) 로킹 Locking

  • 같은 자원을 액세스하는 다중 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 직렬화 기법
    • 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음
    • 로킹 단위가 작아지면 로킹 오버헤드 증가
    • 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함

(2) 낙관적 검증 Optimistic Validation

  • 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법

(3) 타임 스탬프 순서 Time Stamp Ordering

  • 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법

(4) 다중 버전 동시성 제어 MVCC

MVCC; Multi Version Concurrency Control

  • 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법

5. 고립화 수준 (격리성 주요 기법)

Isolation Level

  • 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도

  • Trade-Off: 고립성과 동시성은 반비례

(1) Read Uncommitted

  • 한 트랜잭션에서 연산(갱신) 중인(아직 커밋되지 않은) 데이터를 다른 트랜잭션이 읽는 것을 허용하는 수준

  • Dirty Read, Non-Repeatable Read, Phantom Read가 발생할 수 있다.

  • 연산(갱신) 중인 데이터에 대한 연산은 불허

(2) Read Committed

  • 한 트랜잭션에서 연산(갱신)을 수행할 때, 연산이 완료될 때까지 연산 대상 데이터에 대한 읽기를 제한하는 수준

  • Non-Repeatable Read, Phantom Read가 발생할 수 있다.

(3) Repeatable Read

  • 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료 시까지 해당 데이터에 대한 갱신, 삭제를 제한하는 수준

  • Phantom Read가 발생할 수 있다.

(4) Serializable Read

  • 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근을 제한하는 수준

6. 회복 기법 (영속성 주요 기법)

  • 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업

6-1. 로그 기반 회복 기법

(1) 지연 갱신 회복 기법 Deferred Update

  • 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않고 로그에만 작성하는 기법

(2) 즉시 갱신 회복 기법 Immediate Update

  • 트랜잭션 수행 중 갱신 결과를 로그와 DB에 즉시 반영하는 기법

  • 장애가 발생할 경우, 로그 파일 내용을 참조하여 Undo(되돌리기) 실행

6-2. 체크포인트 회복 기법

  • 장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원시키는 회복 기법

6-3. 그림자 페이징 회복 기법

  • 데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법
profile
🍓e-juhee.tistory.com 👈🏻 이사중

0개의 댓글