데이터베이스 동시성 제어

I. 데이터베이스 무결성 확보 방안, 동시성 제어의 개요

가. 동시성 제어(Concurrency Control)의 개념

  • 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
  • 다중 사용자 환경을 지원하는 데이터베이스에서 필수적으로 지원해야하는 기능으로 병행제어라고 하며 트랜잭션의 직렬화 수행 보장

나. 동시성 제어의 개념도

다. 동시성 제어의 목적

  • 트랜잭션의 직렬성 보장, 동시 수행 트랜잭션 처리량 최대화
  • 공유도 최대, 응답 시간 최소, 시스템 활동의 최대 보장
  • 데이터의 무결성 및 일관성 보장

라. 동시성 제어의 기준

트랜잭션 스케줄직렬성 (Serializability)
각 트랜잭션을 구성하는 연산들이 시스템에서 시간에 따라 실행되는 순서트랜잭션들을 병행 처리한 결과가 트랜잭션들을 순차적(직렬로)으로 수행한 결과와 같아지는 성질

 

II. 동시성 제어 기법의 종류 및 비교

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

구분제어 기법내용
LockingShared Lock데이터 항목에 대해 읽기(read)만 가능
Exclusive Lock데이터 항목에 대해서 읽기와 기록(입력/삭제)가 모두 불가능
2 Phase Locking모든 트랜잭션들이 lock과 unlock연산을 확장 단계와 수축 단계로 구분하여 수행함
Timestamp OrderingDB시스템에 들어오는 트랜잭션 순서대로 System Clock / Logical Counter 할당하고 순서를 부여하여 동시성 제어의 기준으로 사용
Validation(낙관적 검증)트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시 일괄적 검사 기법
MVCC
(다중버전 동시성 제어)
트랜잭션의 타임스탬프와 접근 데이터의 여러 버전 타임스탬프 비교하여 직렬 가능성이 보장되는 버전 선택

나. 동시성 제어 기법 비교

기법장점단점
Locking(2PL)– 데이터 오류 가능성 예방
– 간단한 알고리즘
– Lock 대기시간 발생
– Deadlock 발생
Timestamp– Deadlock 발생 없음
– 트랜잭션 대기 시간 없음
-R ollback 발생 확률 높음
– Cascading Rollback 가능
낙관적 검증– 동시 처리 능력 증가
– 트랜잭션 대기 시간 없음
– 장기 트랜잭션 철회 시 자원 낭비
MVCC– 최근 데이터 값을 선택
– 동시성, 일관성 동시 해결
– Undo 블록 I/O에 따른
오버헤드 발생

 

III. 동시성 제어하지 않는 경우 문제점

구분내용
갱신 손실
(Lost Update)
– 트랜잭션들이 동일 데이터를 동시에 갱신 할 경우 발생
– 이전 트랜잭션이 데이터를 갱신한 후 트랜잭션을 종료하기 전에 나중 트랜잭션이 갱신값을 덮어쓰는 경우 발생
현황파악오류
(Dirty Read)
-트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조함으로써 발생하는 오류
모순성
(Inconsistency)
-두 트랙잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제
연쇄복귀
(Cascading Rollback)
-복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능

가. 갱신 내용 손실 (Lost update) – Dirty Write

구분설명
발생
시점
– 트랜잭션들이 동일 데이터를 동시에 갱신 할 경우 발생
– 이전 트랜잭션이 데이터를 갱신한 후 트랜잭션을 종료하기 전에 나중 트랜잭션이 갱신 값을 덮어쓰는 경우 발생
예제1
– T1과 T2가 순서 없이 동시에 갱신을 시도하여 늦게 일어난 T2의 Write 연산으로 인해 T1의 갱신이 무효화 되었음
예제2
(예) A라는 사람이 100원을 입급하고 B라는 사람이 200원을 출금할 경우

나. 현황 파악 오류 (Dirty Read)

구분설명
정의– 트랜잭션 의 중간 수행 결과를 다른 트랜잭션이 참조함으로써 발생하는 오류
예제

다. 모순성 (Inconsistency)

구분설명
문제점– 두 트랜잭션이 동시에 실행 할 때 DB가 일관성이 없는 모순된 상태로 남는 문제
발생
시점
복수의 사용자가 동시에 DB를 Access 하여 갱신한 결과 DB내의 Data들이 상호 일치하지 않거나 출력된 정보가 모순의 경우
예제1
– T1의 예상 결과값은 x=600, y=600이며, T2의 예상 값은 x=1000, y=1000 이었으나, 실제 최종 결과 값은 x=1300, y=1100으로 모순되는 결과 가져옴
예제2
(예) A가 예약인원 추가에 대해서 예약금을 추가 입금하는 도중에 B도 예약인원 추가와 그에 따른 예약금 추가입금을 시도함으로써 A가 최종 입금해야 하는 금액이 변경된 경우

라. 연쇄 복귀 (Cascading Rollback) or 회복 불능 (Unrecoverability)

구분설명
발생
시점
복수의 트랜잭션이 Data 공유 시 특정 Transaction이 처리의 취소를 하고자 할 때, 다른 Transaction이 처리한 부분에 대해서는 취소 불가한 상태 발생
예제1
– T1의 Read(Y) 이후에 Fail시 Roll back 해야 하는 경우 발생 가정 시 T1의 개시 최초 상태인 X=500, y=500인 상태로 복귀해야 하지만 T2가 이미 트랜잭션을 완료하고 시스템을 떠난 상태이기 때문에 초기 상태로 복귀 불가함
예제2
– 트랜잭션들이 동시에 같은 레코드에 접근하여 갱신하여 도중에 한 트랜잭션은 성공 완료된 상태에서 다른 트랜잭션이 갱신을 취소하고 원래 상태로 복귀하는 과정에서 다른 트랜잭션이 처리한 부분에 대해서는 취소 불가

 

IV. 동시성 제어 시 고려사항

  • 웹 페이지 등의 조회를 중심으로 처리하는 업무는 바로 실행 가능하고, 조회만 처리하므로 Timestamp Ordering 방식 추천
  • 업무적인 구분이 명확하여 서로 중복이 거의 없다면, Validation 동시성 제어 기법 적용 권장함

 

V. 동시성 보장 기법 비교

 

One Comment

콘텐츠 사용 시 출처 표기 부탁 드리고, 궁금한 점이나 의견은 댓글 남겨주세요^^