[데이터베이스] Recovery / Concurrency Control

·2021년 4월 26일
0

Recovery

트랜잭션들을 수행하던 도중 장애가 발생하여 DB가 손상되었을 때 손상되기 전의 상태로 복구하는 작업

  • 장애의 유형
    • 트랜잭션 장애
      입력 데이터 오류, 모호한 데이터, 시스템 자원 요구의 과다 등 트랜잭션 내부의 비정상적 상황으로 프로그램 실행이 중지되는 현상
    • 시스템 장애
      DB에 손상을 입히지는 않았으나 HW 오동작, SW 손상, 데드락 등의 시스템 문제에 의해 트랜잭션 수행에 장애를 주는 현생
    • 미디어 장애
      디스크 블록의 손상, 디스크 헤드의 충돌 등으로 DB가 손상된 상태

Recovery Management

DBMS의 구성 요소이다.
트랜잭션 실행이 실패하면 해당 트랜잭션이 DB에 생성했던 모든 변화들을 Undo하고, 트랜잭션 수행 이전의 원래 상태로 복구한다.
메모리 덤프, 로그를 이용하여 Recovery를 수행한다.

메모리 덤프
: 주기적으로 DB 전체를 복사해 두는 것
로그(=저널)
: DB가 갱신되기 전후의 내용을 기록하는 별도의 파일

Recovery 기법

1. Deferred Update (연기 갱신 기법)

트랜잭션이 성공적으로 완료될 때 까지 DB에 대한 실질적인 갱신을 하지 않는 기법
트랜잭션이 수행되는 동안 갱신된 내용은 일단 Log에 보관된다.
트랜잭션의 부분완료(성공적 완료 직전) 시점에 Log에 보관했던 갱신 내용을 DB에 기록한다.
부분완료되기 전에 장애가 발생하여 트랜잭션이 Rollback되면, 실제 DB에는 변화가 없기 때문에 별도의 작업 없이 무시하면 된다.
Redo 작업이 가능하다. (Undo는 불가능!⭐)

Redo(재시도)
덤프, 로그를 이용하여 가장 최근의 정상적 DB 상태로 Recovery 한 후 트랜잭션을 재실행 시킴
Undo(취소)
로그에 보관한 정보를 이용하여 가장 최근에 변경된 내용부터 거슬러 올라가며 트랜잭션 작업을 취소하고 원래의 DB 상태로 복구시키는 작업

2. Immediate Update (즉각 갱신 기법)

트랜잭션이 데이터를 갱신하는 즉시 실제 DB에 반영하는 방법
장애가 발생하여 Recovery 할 경우를 대비하여 Log에 변화 내용을 기록한다.
Redo, Undo 작업이 가능한다.

3. Shadow Paging (그림자 페이지 대체 기법)

갱신 이전의 DB를 일정 크기의 페이지 단위로 구성하여 각 페이지마다 복사본인 그림자 페이지로 별도 보관해 놓고, 실제 페이지를 대상으로 트랜잭션에 의한 갱신 작업을 하다가 장애가 발생하여 트랜잭션 작업을 Rollback시킬 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 Recovery 하는 기법이다.
Log, Redo, Undo 알고리즘이 필요 없다.

4. Check Point (검사점 기법)

트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 갱신 내용이나 시스템에 대한 상황 등의 정보와 함께 체크포인트를 로그에 보관해 두고, 장애 발생 시 트랜잭션 전체를 Rollback하지 않고 체크포인트부터 Recovery하여 Recovery 시간을 절약하도록 하는 기법이다.

Rollback
장애의 유형 중, 트랜잭션의 실행 중에 장애가 발생했을 때 실행되는 복구작업

Concurrency Control

AKA 병행제어
병행제어란 다중 프로그램의 이점을 활용하여, 동시에 여러 트랜잭션을 병행 수행할 때, 동시에 실행되는 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션 간의 상호 작용을 제어하는 것.

병행제어의 목적

  • DB의 공유를 최대화한다.
  • 시스템 활용도를 최대화한다.
  • DB의 일관성을 유지한다.
  • 사용자에 대한 응답 시간을 최소화한다.

1. Locking

주요 데이터의 엑세스를 상호 배타적으로 하는 것.
트랜잭션들이 어떤 락킹 단위를 엑세스하기 전에 락을 요청해서 허가가 되어야만 그 단위를 엑세스할 수 있도록 하는 기법

2. Time Stamp Ordering

직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법
트랜잭션과 트랜잭션이 R/W한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 Time Stamp를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법
교착상태가 발생하지 않는다.

3. 최적 병행수행

Read Only 트랜잭션의 경우, 병행제어 기법을 사용하지 않고 실행되어도 일관성이 유지된다.

4. MVC (Multi-Version Control, 다중 버전)

타임스탬프의 개념을 이용한다.
트랜잭션 및 데이터들이 갱신될 때마다의 버전을 기록하여 관리한다.

profile
튼튼

0개의 댓글