1. 데이터베이스 무결성 확보 방안, 동시성 제어의 개요
(1) 동시성 제어(Concurrency Control)의 개념
- 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 여러 트랜잭션들이 성공적으로 동시에 실행될 수 있도록 지원하는 기능
- 다중 사용자 환경을 지원하는 데이터베이스에서 필수적으로 지원해야하는 기능으로 병행제어라고 하며 트랜잭션의 직렬화 수행 보장
(2) 동시성 제어의 개념도
(3) 동시성 제어의 목적
(4) 동시성 제어의 기준
| 트랜잭션 스케줄 | 직렬성 (Serializability) |
|---|---|
| 각 트랜잭션을 구성하는 연산들이 시스템에서 시간에 따라 실행되는 순서 | 트랜잭션들을 병행 처리한 결과가 트랜잭션들을 순차적(직렬로)으로 수행한 결과와 같아지는 성질 |
2. 데이터베이스 동시성 제어 기법의 종류 및 비교
(1) 동시성 제어 기법의 종류
| 구분 | 제어 기법 | 내용 |
|---|---|---|
| Locking | Shared Lock | 데이터 항목에 대해 읽기(read)만 가능 |
| Exclusive Lock | 데이터 항목에 대해서 읽기와 기록(입력/삭제)가 모두 불가능 | |
| 2 Phase Locking | 모든 트랜잭션들이 lock과 unlock연산을 확장 단계와 수축 단계로 구분하여 수행함 | |
| Timestamp Ordering | DB시스템에 들어오는 트랜잭션 순서대로 System Clock / Logical Counter 할당하고 순서를 부여하여 동시성 제어의 기준으로 사용 | |
| Validation(낙관적 검증) | 트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시 일괄적 검사 기법 | |
| MVCC (다중버전 동시성 제어) | 트랜잭션의 타임스탬프와 접근 데이터의 여러 버전 타임스탬프 비교하여 직렬 가능성이 보장되는 버전 선택 | |
(2) 동시성 제어 기법 비교
| 기법 | 장점 | 단점 |
|---|---|---|
| Locking(2PL) | – 데이터 오류 가능성 예방 – 간단한 알고리즘 | – Lock 대기시간 발생 – Deadlock 발생 |
| Timestamp | – Deadlock 발생 없음 – 트랜잭션 대기 시간 없음 | -R ollback 발생 확률 높음 – Cascading Rollback 가능 |
| 낙관적 검증 | – 동시 처리 능력 증가 – 트랜잭션 대기 시간 없음 | – 장기 트랜잭션 철회 시 자원 낭비 |
| MVCC | – 최근 데이터 값을 선택 – 동시성, 일관성 동시 해결 | – Undo 블록 I/O에 따른 오버헤드 발생 |
3. 데이터베이스 동시성 제어 하지 않는 경우 문제점
| 구분 | 내용 |
|---|---|
| 갱신 손실 (Lost Update) | – 트랜잭션들이 동일 데이터를 동시에 갱신 할 경우 발생 – 이전 트랜잭션이 데이터를 갱신한 후 트랜잭션을 종료하기 전에 나중 트랜잭션이 갱신값을 덮어쓰는 경우 발생 |
| 현황파악오류 (Dirty Read) | -트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조함으로써 발생하는 오류 |
| 모순성 (Inconsistency) | -두 트랙잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제 |
| 연쇄복귀 (Cascading Rollback) | -복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능 |
(1) 갱신 내용 손실 (Lost update) – Dirty Write
| 구분 | 설명 |
|---|---|
| 발생 시점 | – 트랜잭션들이 동일 데이터를 동시에 갱신 할 경우 발생 – 이전 트랜잭션이 데이터를 갱신한 후 트랜잭션을 종료하기 전에 나중 트랜잭션이 갱신 값을 덮어쓰는 경우 발생 |
| 예제1 | – T1과 T2가 순서 없이 동시에 갱신을 시도하여 늦게 일어난 T2의 Write 연산으로 인해 T1의 갱신이 무효화 되었음 |
| 예제2 | (예) A라는 사람이 100원을 입급하고 B라는 사람이 200원을 출금할 경우 |
(2) 현황 파악 오류 (Dirty Read)
| 구분 | 설명 |
|---|---|
| 정의 | – 트랜잭션 의 중간 수행 결과를 다른 트랜잭션이 참조함으로써 발생하는 오류 |
| 예제 |
(3) 모순성 (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가 최종 입금해야 하는 금액이 변경된 경우 |
(4) 연쇄 복귀 (Cascading Rollback) or 회복 불능 (Unrecoverability)
| 구분 | 설명 |
|---|---|
| 발생 시점 | 복수의 트랜잭션이 Data 공유 시 특정 Transaction이 처리의 취소를 하고자 할 때, 다른 Transaction이 처리한 부분에 대해서는 취소 불가한 상태 발생 |
| 예제1 | – T1의 Read(Y) 이후에 Fail시 Roll back 해야 하는 경우 발생 가정 시 T1의 개시 최초 상태인 X=500, y=500인 상태로 복귀해야 하지만 T2가 이미 트랜잭션을 완료하고 시스템을 떠난 상태이기 때문에 초기 상태로 복귀 불가함 |
| 예제2 | – 트랜잭션들이 동시에 같은 레코드에 접근하여 갱신하여 도중에 한 트랜잭션은 성공 완료된 상태에서 다른 트랜잭션이 갱신을 취소하고 원래 상태로 복귀하는 과정에서 다른 트랜잭션이 처리한 부분에 대해서는 취소 불가 |
4. 동시성 제어 시 고려사항
- 웹 페이지 등의 조회를 중심으로 처리하는 업무는 바로 실행 가능하고, 조회만 처리하므로 Timestamp Ordering 방식 추천
- 업무적인 구분이 명확하여 서로 중복이 거의 없다면, Validation 동시성 제어 기법 적용 권장함
5. 동시성 보장 기법 비교
View Comments (1)
감사합니다! 공부에 도움이 되었습니다 :)