1. 병행제어(Concurrency Control)
1. 1. 병행제어의 뜻
: 동시에 수행되는 트랜잭션들을 일관성 있게 처리하기 위해 제어하는 것.
1. 2. 병행제어의 목적
– 데이터베이스의 공유, 일관성을 최대화.
– 시스템 활용도 최대화.
– 사용자에 대한 응답시간을 최소화.
1. 3. 병행제어의 문제점
- 갱신 분실(Lost Update): 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어짐.
- 모순성(Inconsistency): 두 개의 트랜잭션 수행 시 원치 않는 자료를 이용하면서 문제 발생. 여러 데이터를 가져올 때 발생.
- 비완료 의존성(Uncommitted Dependency): 하나의 트랜잭션이 실패하고 회복하기 전에 다른 트랜잭션이 실패한 결과를 참조.
- 연쇄복귀(Cascading Rollback): 병행수행된 트랜잭션들 중 어느 하나의 문제가 생겨 Rollback할 때, 다른 트랜잭션도 같이 복귀됨.
1. 4. 병행제어의 기법 ★
- 로킹(Locking): 트랜잭션이 어떤 데이터에 접근하고자 할 때 잠금(Locking)수행.
– 로킹단위가 작을수록 로크 수 증가, 병행성⋅공유도 증가, 오버헤드 증가.
– 로킹단위가 작을수록 로크 수 감소, 병행성⋅공유도 감소, 오버헤드 감소.
- 타임스탬프(Time Stamp): 데이터에 접근하는 시간을 미리 정해서 정해진 시간의 순서대로 작업.
2. 회복(Database Recovery) ★
2. 1. 지연 갱신 회복 기법(Deferred Update)
– 모든 변경 내용을 로그 파일에만 저장하고, Commit이 발생하기 전까지는 DB에 기록하지 않음.
– 중간에 장애가 생겨도 DB에 기록되지 않으므로 UNDO 불필요.
– REDO만 수행
2. 2. 즉시 갱신 회복 기법(Immediate Update)
– 트랜잭션 수행 도중 변경내용을 즉시 DB에 기록.
– Commit이 발생하기 이전의 갱신은 원자성이 보장되지 않는 미완료 갱신이므로, 장애 발생시 UNDO 필요.
– UNDO수행 후, 완료된 변경에 대해 REDO 수행