본문 바로가기
  • Always Awake
정보처리기사/5과목

[정보처리기사 필기] 회복과 병행제어, 교착상태

by NerdyBoy 2022. 2. 28.

회복(Recovery)


1. 개요

회복은 트랜잭션들을 수행하는 도중 장애가 발생하여 데이터베이스가 손상되었을 때 손상되기 이전의 정상 상태로 복구하는 작업이다.

 

장애의 유형

  • 트랜잭션 장애 : 입력 데이터 오류, 불명확한 데이터, 시스템 자원 요구의 과다 등으로 트랜잭션 내부의 비정상적인 상황으로 프로그램 실행이 중지 되는 현상
  • 시스템 장애 : 데이터베이스에 손상을 입히지는 않으나 하드웨어 오동작, 소프트웨어의 손상, 교착상태 등에 의해 모든 트랜잭션의 연속적인 수행에 장애를 주는 현상
  • 미디어 장애 : 저장장치인 디스크 블록의 손상이나 디스크 헤드의 충돌 등에 의해 데이터베이스의 일부 또는 전부가 물리적으로 손상된 상태

회복 관리기(Recovery Management)

DBMS의 구성요소로, 트랜잭션 실행이 성공적으로 완료되지 못하면 트랜잭션이 데이터베이스에 생성했던 모든 변화를 취소(Undo) 시키고, 트랜잭션 수행 이전의 원래 상태로 복구하는 역할을 담당한다. 메모리 덤프, 로그(Log)를 이용하여 회복을 수행한다.

 

덤프(Dump) : 주기적으로 데이터베이스 전체를 복사해 두는 것

로그(Log) : 갱신되기 전후의 내용을 기록하는 별도의 파일로, 저널(Jornal)이라고도 함

 

 

 

2. 회복 기법

연기 갱신 기법
(Deferred Update)
트랜잭션이 성공적으로 완료될 때까지 데이터베이스에 대한 실질적인 갱신을 연기하는 기법
  • 수행되는 동안 갱신된 내용은 Log에 보관
  • 부분 완료 시점에 Log 내용을 데이터베이스에 기록
  • Redo 작업만 가능
즉각 갱신 기법
(Immediate Update)
트랜잭션이 데이터를 갱신하면 트랜잭션이 부분 완료되기 전이라도 즉시 실제 데이터베이스에 반영하는 방법
  • 장애가 발생하여 회복 작업할 경우를 대비하여 갱신된 내용들은 Log에 보관시킨다.
  • 회복 작업시 Redo 와 Undo 모두 사용가능
그림자 페이지 대체 기법
(Shadow Paging)
갱신 이전의 데이터베이스를 일정 크기의 페이지 단위로 구성하여 페이지마다 복사본인 그림자 페이지로 별도 보관해 놓고, 실제 페이지를 대상으로 트랜잭션에 의한 갱신 작업을 하다가 장애가 발생하여 트랜잭션 작업을 Rollback시킬 때, 갱신된 이후의 실제 페이지 부분에 그림자 페이지를 대체하여 회복시키는 기법이다.
  • 로그, Undo 및 Redo 알고리즘이 필요 없다.
검사점 기법
(Check Point)
트랜잭션 실행 중 특정 단계에서 재실행할 수 있도록 갱신 내용이나 시스템에 대한 상황 등에 대한 정보와 함께 검사점을 로그에 보관해 두고, 장애 발생 시 트랜잭션 전체를 철회하지 않고 검사점부터 회복 작업을 하여 회복시간을 절약하도록 하는 기법

 

 

 

병행제어(Concurrency Control)


1. 개요

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

병행제어의 목적

  • 데이터베이스 공유를 최대화
  • 시스템 활용도 최대화
  • 데이터베이스 일관성 유지
  • 사용자에 대한 응답 시간 최소화

 

2. 병행 제어 기법 종류

로킹(Locking) 주요 데이터의 액세스를 상호 배타적으로 하는 것이다.
  • 트랜잭션들이 어떤 로킹 단위를 액세스하기 전에 Lock(잠금)을 요청해서 허락되어야만 그 로킹 단위를 액세스할 수 있도록 하는 기법
타임 스탬프 순서
(Time Stamp Ordering)
직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법
  • 트랜잭션이 시작하기전 데이터에 Time Stamp 를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행
  • 교착상태 발생하지 않음
최적 병행수행
(검증 기법, 확인 기법, 낙관적 기법)
병행하고자 하는 대부분 트랜잭이 판독 전용(Read Only) 트랜잭션일 경우, 트랜잭션 간 충돌률이 매우 낮아서 병행제어 기법을 사용하지 않고 실행되어도 이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법이다.
다중 버전 기법 타임 스탬프의 개념을 이용해서 다중 타임 스탬프 기법이라고도 한다.
  • 시간표가 아닌 갱신될 때마다의 버전을 부여한다

로킹 단위 : 로킹 단위가 크면 로크 수가 작아 관리하기 쉽지만 병행성 수준이 낮아지고, 작으면 관리가 복잡해 오버헤드가 증가하지만 병행성 수준이 높아짐

 

3. 문제점

병행제어 기법에 의해 트랜잭션들이 데이터베이스에 동시에 접근하도록 허용할 경우 다음과 같은 문제점이 발생

  • 갱신 분실(Lost Update) : 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
  • 비완료 의존성(Uncommitted Dependency) : 트랜잭션 실패 회복전 참조하는 현상
  • 모순성(Inconsistency) : 원치 않는 자료를 이용하여 발생하는 문제
  • 연쇄 복귀(Cascading Rollback) : 하나를 롤백하면 다른것도 롤백되는 현상

 

 

교착상태(Dead Lock)


1. 개요

교착상태는 상호 배제에 의해 나타나는 문제점으로, 둘 이상의 프로세스들이 자원을 점유한 상태에서 서로 다른 프로세스가 점유하고 있는 자원을 요구하며 무한정 기다리는 현상을 의미

 

 

2. 교착상태 발생 필요 충분 조건

Dead Lock은 다음중 네가지 조건이 모두 충족되어야 나타난다.


상호 배제

(Mutual Exclusion)

한 번에 한 개의 프로세스만이 공유 자원을 사용할 수 있어야 한다.

점유와 대기

(Hold and Wait)

최소한 하나의 자원을 사용하고 있으면서 다른 프로세스에 있는 자원을 추가로 사용하기 위해 대기 하고있는 프로세스가 있어야한다.

비선점

(Non-preemption)

다른 프로세스에 할당된 자원은 사용이 끝날 때까지 강제로 빼앗을 수 없어야 한다.

환형 대기

(Circular Wait)

공유 자원과 공유 자원을 사용하기 위해 대기하는 프로세스들이 원형으로 구성되어 자신에게 할당된 자원을 점유하면서 앞이나 뒤에 있는 프로세스의 자원을 요구해야 한다.
  •  

3. 교착상태 해결 방법

예방 기법
(Prevention)

교착 상태가 발생하지 않도록 사전에 시스템을 제어하는 기법. 발생조건 중에서 어느 하나를 제거한다
  • 자원의 낭비가 가장 심한 기법
회피 기법
(Avoiddance)

교착 상태가 발생할 가능성을 배제하지 않고 교착상태가 발생하면 적절히 피해나가는 방법으로, 주로 은행원 알고리즘(Banker's Algorithm)이 사용된다.
  • 은행원 알고리즘(Banker's Algorithm) : E. J. Dijkstra가 제안한 알고리즘으로, 은행에서 모든 고객의 요구가 충족되도록 현금을 할당하는 데서 유래한 기법

발견 기법

(Detection)

시스템에 교착상태가 발생했는지 점검하여 교착상태에 있는 프로세스와 자원을 발견하는 것

회복 기법

(Recovery)

교착상태를 일으킨 프로세스를 종료하거나 교착상태의 프로세스에 할당된 자원을 선점하여 프로세스나 자원을 회복하는 것을 의미한다.

 

 

 


출처

자료 참고: 

시나공 정보처리기사 필기 2022를 참고하여 작성되었습니다

표지

댓글