2018년 12월 10일
데이터베이스 동시성 제어
I. 데이터베이스 무결성 확보 방안, 동시성 제어의 개요
가. 동시성 제어(Concurrency Control)의 개념
- 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
- 다중 사용자 환경을 지원하는 데이터베이스에서 필수적으로 지원해야하는 기능으로 병행제어라고 하며 트랜잭션의 직렬화 수행 보장
나. 동시성 제어의 개념도
다. 동시성 제어의 목적
- 트랜잭션의 직렬성 보장, 동시 수행 트랜잭션 처리량 최대화
- 공유도 최대, 응답 시간 최소, 시스템 활동의 최대 보장
- 데이터의 무결성 및 일관성 보장
라. 동시성 제어의 기준
트랜잭션 스케줄 | 직렬성 (Serializability) |
---|---|
각 트랜잭션을 구성하는 연산들이 시스템에서 시간에 따라 실행되는 순서 | 트랜잭션들을 병행 처리한 결과가 트랜잭션들을 순차적(직렬로)으로 수행한 결과와 같아지는 성질 |
II. 동시성 제어 기법의 종류 및 비교
가. 동시성 제어 기법의 종류
구분 | 제어 기법 | 내용 |
---|---|---|
Locking | Shared Lock | 데이터 항목에 대해 읽기(read)만 가능 |
Exclusive Lock | 데이터 항목에 대해서 읽기와 기록(입력/삭제)가 모두 불가능 | |
2 Phase Locking | 모든 트랜잭션들이 lock과 unlock연산을 확장 단계와 수축 단계로 구분하여 수행함 | |
Timestamp Ordering | DB시스템에 들어오는 트랜잭션 순서대로 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. 동시성 보장 기법 비교
About The Author
도리
One Comment
감사합니다! 공부에 도움이 되었습니다 🙂