[데이터베이스 목차]

 

동시성제어/병행제어(Concurrency Contrl)

1.  데이터베이스 무결성 확보를 위한, 동시성 제어 개요

1) 동시성 제어의 정의

  • DBMS에서 동시에 작동하는 여러개의 트랜잭션이 작업을 성공적으로 종료하도록 실행순서를 제어하는 기법
  • 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 다수의 트랜잭션 작업이 성공적으로 실행될 수 있도록 지원하는 제어 기능
  • 동시에 실행되는 다수의 트랜잭션 작업에서도 데이터베이스의 작업(입력, 수정, 삭제, 검색) 시 데이터의 무결성이 유지 되도록 제어하는 기법

2) 동시성 제어의 목적 

  • 일관성 측면 : 트랜잭션의 직렬 가능성을 확보하여 데이터의 일관성 보장, 데이터 무결성 보장
  • 공용성 측면 : 시스템의 활용도, 공유 최대화, 사용자 응답시간 최소화

2. 동시성 제어 미처리 시의 문제점

구분 현상  설명
갱신 손실
(Lost Update)
- 트랜잭션들이 동일 데이터를 동시에 갱신할 경우 발생
현황파악오류
(Dirty Read)
-ㅠ트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조함으로써 발생하는 오류
모순성
(Inconsistency)
- 두 트랜잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제

연쇄복귀
(Cascading Rollback)
- 복수의 트랜잭션이 데이터 공유시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능

 - 경신손실, 현황파악오류, 모순, 연쇄복귀 발생으로 병행제어 필요

 

3. 동시성 제어 기법의 종류

1) 동시성 제어 기법

  • 낙관적, 비관적으로 분류하여 동시성 제어 수행

2) 동시성 제어 기법의 종류

기법 개념도 작동방식
Locking 기법
-트랜잭션이 사용하는 자원에 대하여 상호 배제 기능을 제공하는 기법
-공유 lock : 다른 트랜잭션도 읽기 실행 가능
-전용 lock : 다른 트랜잭션은 읽기, 기록 모두 불가
2PL
(2 Phase Locking)
-확장단계 : 트랜잭션은 오직 lock만 수행 가능
-수축단계 : 트랜잭션은 오직 unlock만 수행 가능
-모든 트랜잭션들이 lock과 unlock연산을 확장 단계와 수축 단계로 구분하여 수행함
Timestamp
Ordering
-시스템 시계 : 시스템 시간을 타임스탬프 값으로 부여
-논리적 계수기 : 트랜잭션 발생시마다 카운터를 하나씩 증가시켜 타임스탬프로 부여
-DB시스템에 들어오는 트랜잭션 순서대로 System Clock / Logical Counter 할당하고 순서를 부여하여 동시성 제어의 기준으로 사용
낙관적 검증기법
-트랜잭션 수행 동안 트랜잭션을 위해 유지되는 데이터 항목들의 지역 사본에 대해서만 갱신이 이루어짐
-트랜잭션 종료 시 동시성을 위한 트랜잭션 직렬화가 검증되면 일시에 DB에 반영함
-트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시 일괄적 검사 기법
다중버전 동시성 제어
(MVCC)
-트랜잭션이 한 데이터에 접근하려 할 때, 그 트랜잭션의 타임스탬프와 접근하려는 데이터의 여러 버전의 타임스탬프를 비교하여, 현재 실행하고 있는 스케줄의 직렬 가능성이 보장되는 버전을 선택하여 접근하도록 하는 기법
-트랜잭션의 타임스탬프와 접근 데이터의 여러 버전 타임스탬프 비교하여 직렬 가능성이 보장되는 버전 선택

 

4. 동시성제어의 문제점 및 해결방안

1) 동시성제어의 분류

  • Locking 해제 과정, 타임스탬프 부여에 따라 Deadlack, Rollback, 자원 낭비 등의 문제 발생

2) 동시성제어 문제점

기법 문제점 설명
Locking(2PL) Deadlock 발생 - 락킹과 해제과정 중 서로 교착상태 조건 충족시 서로 대기하는 상태 발생
Timestamp 롤백 - 타임스탬프 비교에 따른 롤백 
낙관적 검증 자원낭비 - 트랜잭션 마지막 단계에서 기록하는 낙관적 검증 기법은 자원낭비 문제 발생
MVCC 롤백 - 충돌문제는 대기가 아니라 복귀처리 함으로 연쇄 복귀초래 발생 가능성
  • 문제점에 따라 선택적 기법 활용

3) 동시성제어 문제 발생 시 해결방안

  • 타임스탬프 적용 시 Wait-die, Wond-wait 적용
비고 Wait-die Wound-wait
정의 오래된 트랜잭션 기다리고, 새로운 트랜잭션이 Rollback 되고 다시 계획 오래된 트랜잭션이 새로운 트랜잭션을 rollback 시키고 이를 다시 계획
트랜잭션 양 lock을 요청하는 단계 중에 abort되어 재시작되므로, abort되는 트랜잭션의 처리된 양이 적음 처리도중 높은 우선 순위
트랜잭션에 의해 abort되므로, 그 동안 처리된 일이 모두 무시되어 불필요한 작업 수행
공통점 - 두 방법 모두 우선 순위가 높은 트랜잭션이 낮은 우선순위의 트랜잭션을 abort 시킴
- 중지된 트랜잭션은 기존 타임스탬프를 가지고 재시작
- 결국 시스템에서 가장 높은 우선 순위를 갖게 되어 완료됨
- 구현이나 관리가 waits-for graph보다 쉬움

 

+ Recent posts