- DBMS가 다수의 사용자 사이에서 동시에 작용하는
다중 트랜잭션의 상호간섭 작용에서 Database를 보호하는 것.- 트랜잭션의 직렬화 수행을 보장한다.
- 일반적으로 동시성을 허용하면 일관성이 낮아지는 반비례 관계를 가짐.
제어기법 | 내용 |
---|---|
Shared Lock | 데이터 항목에 대해 Read만 가능 |
Exclusive Lock | 데이터 항목에 대해 Read/Write 모두 불가능 |
2 Phase Locking | 모든 트랜잭션이 lock과 unlock 연산을 확장 단계와 수축 단계로 구분하여 수행 |
Timestamp Ordering | DB 시스템에 들어오는 트랜잭션 순서대로 System Clock / Logical Counter을 할당하고 순서를 부여하여 동시성 제어의 기준으로 사용 |
Validation(낙관적 검증) | 트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시 일괄적 검사 기법 |
MVCC | 트랜잭션의 타임스탬프와 접근 데이터의 여러 버전 타임스탬프를 비교하여 직렬 가능성이 보장되는 버전을 선택 |
WAIT
or NOWAIT
옵션과 함께 사용
- 하나의 트랜잭션이 실행하는 동안 특정 데이터 항목에 대해서 다른 트랜잭션이 동시에 접근하지 못하도록 상호배게(Mutual Exclusive) 기능을 제공하는 기법.
- 하나의 트랜잭션이 데이터 항목에 대해 Lock을 설정하면 트랜잭션이 unlock할 때까지 데이터 독점 사용이 가능하다.
한계: 교착상태
항상 직렬 가능한 스케줄을 보장하진 못하기 때문
두 트랜잭션이 각자 특정 자원에 대해서 Lock을 건 상태에서 서로 가지고 있는 자원을 요청했을 때.
서로의 트랜잭션이 unlock될 때까지 무한대기 상태에 빠진다.
- 확장 단계(Growing Phase): 트랜잭션이 lock 연산을 수행할 수 있고 unlock 연산을 수행할 수 없는 단계
- 축소 단계(Shrinking Phase): 트랜잭션이 unlock 연산만을 수행할 수 있고 lock 연산은 수행할 수 없는 단계
- Multi Version Concurrency Control. 다중 버전 동시성 제어
- 동시 접근을 허용하는 데이터 베이스에서 동시성을 제어하기 위해 사용하는 모델
- 가장 큰 목적은 잠금을 사용하지 않는 일관된 읽기를 제공하는 데 있다.
데이터에 접근하는 사용자는 접근한 시점에서 DB의 Snapshot을 읽는다.
이 Snapshot 데이터에 대한 변경이 완료될 때(트랜잭션이 commit 될 때)까지
만들어진 변경사항은 다른 사용자가 볼 수 없다.
사용자가 데이터 업데이트 했다면
새로운 버전의 데이터를 UNDO
영역에 생성한다.
이전 데이터를 덮어 씌우는 게 아니라 새로운 버전 생성.
대신 이전 버전의 데이터와 비교하여 변경 내용을 기록한다.
그 결과, 하나의 데이터에 대해 여러 개의 버전이 생기게 되고 사용자는 마지막 버전의 데이터를 읽게 된다.
장점
단점