5. Transaction


db

Overview

데이터베이스의 중요한 개념인 트랜잭션에 대한 포스트


트랜잭션(Transaction)

  • 데이터베이스 내에서 한꺼번에 모두 수행되어야 할 연산들의 집합
  • 하나의 작업 처리를 위한 논리적 작업 단위
  • 트랜잭션 내의 연산은 한꺼번에 완료되어야 하며 그렇지 못한 경우 모두 취소되어야 함

트랜잭션의 성질(ACID)

  • 원자성(Atomicity)
    • 트랜잭션의 가장 기본적인 특성으로 트랜잭션 내의 연산은 반드시 모두 수행되어야 하며 그렇지 않은 경우 모두 수행되지 않아야 함
  • 일관성(Consistency)
    • 트랜잭션이 정상적으로 완료된 후 언제나 일관성 있는 데이터베이스 상태가 되어야하며, 결과에 모순이 생겨서는 안 됨
  • 격리성(Isolation)
    • 독섭성이라고 하며 하나의 트랜잭션이 수행 중에는 다른 트랜잭션이 접근할 수 없고 각각의 트랜잭션은 독립적이여야 함
  • 영속성(Durability)
    • 지속성이라고 하며 트랜잭션이 성공적으로 완료된 후 결과는 지속적으로 유지되어야 함

트랜잭션 연산

  • COMMIT
    • 트랜잭션이 성공적으로 종료된 후 수정된 내용을 지속적으로 유지하기 위한 연산
  • ROLLBACK
    • 트랜잭션이 비정상적으로 수행 및 오류가 발생했을 때 수행작업을 취소하고 이전 상태로 되돌리기 위한 연산

트랜잭션의 상태도

  • 실행
    • 현재 실행 중인 상태
  • 부분 완료
    • 실행을 모두 마치고, 데이터베이스에 결과를 저장하기 직전 상태
  • 완료
    • 트랜잭션의 연산을 정상적으로 마치고, 연산 결과를 데이터베이스에 저장한 상태
  • 실패
    • 트랜잭션 실행 중 오류에 의해 더 이상 진행될 수 없는 상태
  • 철회
    • 트랜잭션 실행이 실패되어 복귀되는 상태

트랜잭션 스케줄

  • 동시에 여러 개의 트랜잭션들이 병행 실행되는 경우 트랜잭션의 연산들이 실행되는 순서를 말하는 것
  • 직렬 스케줄 : 각 트랜잭션 별로 구분하여 한 트랜잭션을 구성 하는 연산들을 연속적으로 모두 실행 후, 다른 트랜잭션을 수행
  • 비직렬 스케줄 : 트랜잭션을 병행하여 수행하는 방법
    • 인터리브 실행 기법을 이용하여 각 트랜잭션의 연산들을 번갈아가면서 병행 실행

회복

  • 여러 가지 요인으로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업
  • 회복을 위해 Log를 이용하게 되는데, Log는 트랜잭션이 수행되어 변경되는 데이터베이스의 상황 정보를 기록하는 것
    • 트랜잭션이 수행되기 이전 값과 수행된 이후 값 모두 기록됨

회복 기법

  • 즉시 갱신 기법
    • 트랜잭션이 실행(활동) 상태에서 변경되는 내용을 바로 데이터베이스에 적용하는 기법
    • 변경되는 모든 내용은 로그에 기록하여 장애 발생 시 로그의 내용을 토대로 회복시킴
  • 지연 갱신 기법
    • 트랜잭션이 수행되어 부분 완료가 될 때까지 데이터베이스에 적용하지 않고 지연시킨 후, 부분 완료가 되면 로그의 내용을 토대로 데이터베이스에 적용하는 기법
  • 검사 시점 기법
    • 트랜잭션이 실행되는 중간에 검사지점을 지정하여 검사 시점까지 수행 후 완료된 내용을 데이터베이스에 적용하는 기법
  • 그림자 페이징 기법
    • 로그를 사용하지 않고 데이터베이스를 동일한 크기의 단위인 페이지로 나누어 각 페이지마다 복사하여 그림자 페이지를 보관하는 기법
    • 데이터베이스의 변경되는 내용을 원본 페이지에만 적용하고, 장애가 발생되는 경우 그림자 페이지를 이용해 회복

REDO(재수행)와 UNDO(취소)

  • REDO
    • 트랜잭션이 수행되어 COMMIT이 되면 변경된 내용을 데이터베이스에 반영하게 될 때 로그의 내용을 토대로 재수행하며 변경된 내용을 데이터베이스에 반영하게 되는 과정
  • UNDO
    • : 트랜잭션이 수행되는 도중 오류가 발생하거나 비정상적으로 종료되는 경우 트랜잭션이 시작된 시점으로 되돌아 가는 과정

데이터베이스 수행 시 발생되는 장애의 유형

  • 트랜잭션 장애 : 하나의 트랜잭션이 수행되는 과정에서 발생하는 오류
  • 시스템 장애 : 트랜잭션 장애들로 인해 시스템 상의 문제가 발생하여 트랜잭션이 수행되지 못하는 경우
  • 미디어 장애 : 하드웨어적으로 디스크 등이 손상되는 경우

병행제어(Concurrency Control)

  • 동시에 여러 개의 트랜잭션이 실행되는 경우를 병행 실행
  • 병행 실행 시 트랜잭션 간의 격리성을 유지하여 트랜잭션 수행에 문제가 발생되지 않도록 제어

로킹(Locking)

  • 트랜잭션의 병행 실행 시 하나의 트랜잭션이 사용하는 DB내의 데이터를 다른 트랜잭션이 접근하지 못하게 하는 것
  • 하나의 트랜잭션이 실행될 때는 ‘LOCK’을 설정, 실행이 끝나면 ‘UNLOCK’을 통해 해제
    • LOCK -> 트랜잭션 실행 -> 트랜잭션 완료 -> UNLOCK

로킹의 접근 허용

  • 한 트랜잭션의 수행시간이 너무 길어 오랜 시간 동안 데이터에 LOCK이 설정된 상탱로 지속되면 교착상태 발생 가능
  • 하나의 트랜잭션이 수행하는 동안에도 다른 트랜잭션이 데이터에 접근할 수 있도록 해야 함
    • 공유 락(Shared Lock) : 사용 중인 데이터에 대해 읽기만 허용하고 쓰기는 허용하지 않음
    • 배타 락(Exclusive Lock) : 사용 중인 데이터에 대해 읽기와 쓰기 모두 허용하지 않음

로킹 단위

  • LOCK을 설정할 때 데이터의 크기
  • 로킹 단위는 테이블, 속성, 튜플 단위로 설정 가능
  • 로킹 단위가 크면 많은 양의 데이터의 LOCK 설정 가능 / 작으면 적은 양의 데이터의 LOCK 설정 가능
  • 로킹 단위가 크면 병행성 수준이 낮아지고, 로킹 단위가 작으면 병행성 수준이 높아짐

2단계 로킹 기법(Two-Phase Locking Protocol)

  • 로킹의 대표적 기법으로 LOCK 설정 대상 데이터가 여러 개인 경우, 모든 데이터에 LOCK을 설정하는 단계와 완료 후 LOCK을 해제하는 단계의 2단계로 구성된 기법
    • 확장 단계 : 트랜잭션 수행에 필요한 데이터들에 대해 LOCK을 설정하는 단계
    • 축소 단계 : 트랜잭션 수행에 사용되었던 데이터들에 대해 더 이상 필요없이 설정 된 LOCK을 해제하는 단계
  • 교착상태가 발생할 수 있는 단점 존재

타임 스탬프(Time Stamp)

  • 각 트랜잭션이 데이터에 접근할 시간을 미리 지정하여 기억시킨 뒤 그 시간의 순서에 따라 순서대로 데이터에 접근하여 수행
  • 모든 트랜잭션은 데이터의 접근 시간에 맞춰 수행하므로 교착상태가 발생하지 않음

병행제어를 하지 않았을 때의 문제점

  • 갱신 분실 (Lost Update)
    • 두 개 이상의 트랜잭션이 수행되는 과정에서 연산 결과의 일부가 없어지는 현상
  • 모순성 (Inconsistency)
    • 두 개 이상의 트랜잭션이 수행되어 얻어진 결과가 일관성 없이 서로 다른 현상
  • 연쇄 복귀 (Cascading Rollback)
    • 두 개 이상의 트랜잭션이 수행되던 중 하나의 트랜잭션이 취소되므로 인해 연쇄적으로 다른 트랜잭션도 취소되는 현상
  • 비완료 의존성 (Uncommittes Dependency)
    • 하나의 트랜잭션 수행이 실패한 후 회복되기 이전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상





© 2019. by RaP0d

Powered by aiden