[정보처리기사] 데이터베이스 구축 - 병행제어
병행제어 (Concurrency Control)
: 여러 개의 트랜잭션을 병행 수행할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록 트랜잭션 간의 상호작용을 제어
병행제어 기법 4가지
(1) 로킹
: 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션이 그 데이터 항목을 액세스 할 수 없도록 하는 기법
: 잠금(Lock)을 설정한 트랜잭션이 해제(Unlock)할 때까지, 독점적으로 사용할 수 있게 상호 배제 기능을 제공
: 로킹 단위란, 한 번에 한 명만 사용할 수 있는 단위
→ 로킹이 작을수록 관리가 어려움 / 로크수, 오버헤드, 공유도(병행 수준) 증가
(2) 낙관적 검증 (최적 병행 수행기법)
: 일단 트랜잭션을 수행하고, 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법
: 판독 전용(Read Only)트랜잭션인 경우 충돌률이 낮아서 일관성 있게 유지 가능
(3) 타임스탬프 오더링 (Timestamp Ordering)
: 시스템에서 생성하는 고유 번호인 시간 스탬프를 트랜잭션에 부여하는 것으로, 트랜잭션 간의 순서를 미리 선택하고 동시성 제어의 기준으로 사용하는 기법 (직렬화)
: 교착상태 발생하지 않음
(4) 다중 버전 동시성 제어 (MVCC, Multi Version Concurrency Control)
: 여러 버전 타임스탬프 비교하여, 현재 실행 중인 스케쥴의 직렬 가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법
: 갱신 시에만 버전 부여, 관리
목적
- 데이터베이스의 공유 최대화
- 데이터베이스의 일관성 유지
- 시스템 활용도 최대화
- 사용자에 대한 응답 시간 최소화
문제점
- 갱생 분실 (Lost Update) : 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때, 갱신 결과의 일부가 없어지는 현상
- 비 완료 의존성 (Uncommitted Dependency) : 하나의 트랜잭션이 실패한 후 회복되기 전에 다른 트랜잭션이 실패한 갱신 결과를 참조하는 현상 (임시 갱신) → 현황파악 오류 (Dirty Read)
- 모순성 (Inconsistency) : 두 개의 트랜잭션이 병행수행될 때 원치않는 자료를 이용함으로써 발생하는 문제(불일치 분석) → 일관성 결여
- 연쇄 복귀 (Cascading Rollback) : 병행수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback하는 경우, 다른 트랜잭션도 함께 Rollback되는 현상 → 부분 취소 불가
참고 및 출처:
[정보처리기사]3.데이터베이스 구축/SQL 활용/병행제어
병행 제어(Concurrency Control) 1. 병행제어(Concurrency Control) - 다중 프로그램의 이점을 활용하여 동시에 여러 개의 트랜잭션을 병행 수행할 때, 동시에 실행되는 트랜잭션들이 데이터베이스의 일관성
potato-potahto.tistory.com