[Database] 병행 제어(Concurrency Control)
[Database] 병행 제어(Concurrency Control)
1. 병행 제어(Concurrency Control)의 개념
- 동시에 여러개의 트랜잭션을 병행 수행할 때, 트랜잭션들이 DB의 일관성을 파괴하지 않도록 트랜잭션간의 상호작용을 제어하는 것
- 병행성 : 트렌잭션들이 동시에 인터리빙(Interleaving)하게 실행되는 것
- 인터리빙 : 트랜잭션이 번갈아가며 조금씩 처리를 수행하는 것
2. 병행 제어의 목적
- DB의 공유도 최대화
- 시스템 활용도 최대화
- 응답 시간 최소화
- 단위 시간당 트랜잭션 처리 건수 최대화
- DB의 일관성 유지
3. 병행 제어의 필요성
4. 잠금(lock)
- 하나의 트랜잭션이 사용중인 데이터를 다른 트렌젝션이 접근하지 못하게 하는 것
- 데이터를 갱신할 때 순서
- 잠금(lock) -> 실행(Execute) -> 해제(Unlock)
- 교착 상태 : 데이터를 사용중인 트랜잭션이 잠가놓은 자원을 사용하기 위해 다른 트랜잭션들이 무한정 대기하는 현상
5. 병행 제어 기법의 종류
2단계 잠금 규약 기법
- 트랜잭션 스케쥴의 직렬성을 보장하는 대표적인 기법
- 2단계는 다음과 같다
- 확장 단계 : 잠금만 수행할 수 있음(해제 불가)
- 축소 단계 : 해제만 수행할 수 있음(잠금 불가)
- 장점: 직렬성 보장/ 단점 : 교착 상태 예방 불가능
타임 스탬프 기법
- 동시성 제어를 위한 직렬화 기법으로 트랜잭션 간의 순서를 미리 정함.
- 시스템에 도착한 순서대로 타임 스탬프를 부여하여, 순서대로 실행하도록 한다.
- 교착 상태가 발생하지 않는다.
락킹
- 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션은 그 데이터를 액세스 할 수 없게 하는 방법
- 트랜잭션은 데이터를 액세스하기 전에 Lock을 요청하고 액세스를 마치고 Lock을 해제
- 이미 Lock이 걸려 있을 때는 Lock이 풀리기 전에는 액세스 할 수 없음
- Locking 단위가 작으면 병행성 수준이 높아지며 대신 Locking 오베허드는 증가
출처
댓글
댓글 쓰기