티스토리 뷰
[Database] 병행 제어 (Concurrency Control) / 로킹 (Locking)
틔틔 2022. 9. 3. 21:58병행 제어 (Concurrency Control)
: 여러 트랜잭션을 병행 수행할 때 데이터베이스의 일관성을 파괴하지 않게 제어함
병행의 문제점
- 갱신 분실 (Lost Update): 두 개의 트랜잭션이 같은 데이터를 갱신할 때, 하나의 갱신 작업이 분실됨
- 비완료 의존성 (Uncommited Dependency): 트랜잭션 수행이 실패 후 회복되기 전, 다른 트랜잭션이 실패한 결과를 참조함
- 모순성 (Inconsistency): 두 개의 트랜잭션이 같은 데이터에 접근하여 일관성을 해치는 경우
- 연쇄 복귀 (Cascading Rollback): 병행 수행되던 트랜잭션 중 하나가 롤백하는 경우 다른 트랜잭션도 함께 롤백되는 현상
병행 제어 목적
- 데이터베이스의 공유 최대화
- 시스템 활용도 최대화
- 데이터베이스의 일관성 유지
- 사용자에 대한 응답시간 최소화
제어 방법
1. 로킹 (Locking)
: 상호 배제 기능을 제공하여 트랜잭션의 순차적 진행을 보장함
DBMS가 자동으로 적용하기도 하고 수동으로도 적용 가능
로킹 단위에는 필드, 레코드, 파일, 데이터베이스 모두 가능
로킹 단위 ↑ / 로크 수 ↓ / 로킹 오버헤드 ↓ / 공유도 병행성 ↓
로킹 단위 ↓ / 로크 수 ↑ / 로킹 오버헤드 ↑ / 공유도 병행성 ↑
- 배타 잠금 (Exclusive Lock)
트랜잭션에서 데이터를 변경하고자 할 때(write), 해당 트랜잭션이 완료될 때까지 다른 트랜잭션에서 읽거나 쓰지 못하게 lock을 걸음
배타 잠금이 걸린 데이터에 대해 다른 트랜잭션은 배타 잠금, 공유 잠금 모두 불가
- 공유 잠금 (Shared Lock)
트랜잭션에서 데이터를 읽고자 할 때, 리소스를 다른 사용자가 동시에 읽을 수 있지만(Shared Lock끼리) 변경은 불가(Exclusive Lock 걸 수 없음)
하나의 데이터에 대해 공유 잠금은 동시에 여러개 적용 가능
공유 잠금이 걸려있으면 배타 잠금은 불가
2단계 로킹 규약 (two-phase locking)
: 모든 lock 연산 뒤에 모든 unlock 연산을 수행하는 동시성 제어 기법
직렬 가능성을 100% 보장함
확장 단계 (growing phase): 트랜잭션은 새로운 lock 연산만 수행, unlock 연산은 수행 불가
축소 단계 (shrinking phase): 트랜잭션은 새로운 unlock 연산만 수행, unlock 연산 수행하면 더 이상 lock 연산 수행 불가
- 엄격(Strict) 2PL: 교착상태 문제를 내포함
- 엄밀(Rigorous) 2PL: 교착상태 문제를 내포함
- 보수적/정적 (Conservative/Static) 2PL: 교착상태 발생 X
2. 타임 스탬프 순 (Time Stamp Ordering)
트랜잭션이 읽거나 트랜잭션이 실행 시작 전에 타임 스탬프를 부여하여 해당 시간에 따라 트랜잭션 수행
교창상태 보장, 연쇄 복귀 문제 발생 가능
3. 다중 버전 타임 스탬프
4. 검증 확인
'Computer Science > Database' 카테고리의 다른 글
[Database] 분산 데이터베이스 (0) | 2022.09.04 |
---|---|
[Database] 인덱스 (Index) (0) | 2022.09.04 |
[Database] 트랜잭션 격리 수준 / 고립도 (Isolation Level) (0) | 2022.09.03 |
[Database] 트랜잭션 회복 기법 (Recovery) (0) | 2022.09.03 |
[Database] 트랜잭션(Transaction) / ACID (0) | 2022.08.31 |