직렬성(Serialization)
갱현모연(LDIC)
[직렬성] 여러 트랜잭션이 동시에 병행 수행되더라도 각 트랜잭션이 하나씩 차례대로 수행되는 것과 같은 데이터베이스의 일관성을 보장하는 수행특성
[직렬가능성] 병형스케줄 S가 직렬스케줄 S'와 동등시 S는 직렬가능성
[스케쥴] 충돌가능성, View 직렬 가능성 => 직렬화
[직렬성 보장 프로토콜] 2PC, Timestamp Ordering, Validation(낙관)
[직렬성 결여시 문제점] [갱현모연, LDIC]
- 갱신손실 (Lost Update)
- 현황파악오류 (Dirty Read)
- 모순성 (Inconsistency)
- 연쇄복귀 (Cascading Rollback)
- 회복불능
2PL (2 Phase Locking)
read_lock(), write_lock(), unlock()
확장단계,수축단계
교착상태 미발생
[개념] 다중 트랜잭션 환경에서 직렬성을 보장하기 위해 모든 트랜잭션들이 lock연산과 unlock연산을 확장단계와 수축단계로 구분하여 수행하는 동시성 제어 기법.
[절차] 확장단계 -> 차단단계(연산) -> 수축단계 / lock ->unlock
1)확장단계: 새로운 Lock 획득가능, 해제 불가
2)수축단계:보유 Lock해제, 새로운 Lock 획득불가
[변형]
1)스트릭트(전용락 완료 기다림),
2)리고로스(모든락기다림)
3)스태틱(읽기집합, 쓰기집합 미리선언, 모든락 획득)
TimeStamp Ordering
생성(system clock, 논리적 계수기)
직렬성 보장, 순차처리
데드락방지, 연쇄복구 초래 가능
[개념] 트랜잭션 순서대로 timestamp 지정하여 동시성 제어의 기준으로 사용
[구성] 1)read_TS(X): X를 성공적으로 읽은 트랜잭션 타임스탬프 중 가장 큰 값
2)write_TS(X): X를 성공적으로 기록한 트랜잭션 타임스탬프 중 가장 큰 값
[절차]
가.트랜잭션 T가 write_item(X) 연산을 수행시
1) TS(T) < read_TS(X) or TS(T) < write_TS(X)이면 T를 철회/복귀 연산 거부(reject)
2) 조건이 미발생시 T는 write_item(X) 연산 수행 write_TS(X)를 TS(T)로 설정
나. 트랜잭션 T 가 read_item(X) 연산을 수행시
1)TS(T) <= write_TS(X)면 T를 철회하고 복귀시키고 그 연산을 거부
2)TS(T) >= write_TS(X)면 READ수행
시스템시계(system clock), 논리적계수기(counter),
데드락방지기법(웨잇다이,운드웨이트)
[알고리즘]
1)Wait-Die 알고리즘
TS(Ti) < TS(Tj)이면(Ti가 Tj보다 먼저 시작되었다면)
Ti는 대기(Wait)
그렇지 않으면(Ti가 Tj보다 나중에 시작되었다면)
Ti가 철회(Die). 나중에 Ti 재시작
2)Wound-Wait 알고리즘
TS(Ti) < TS(Tj)이면(Ti가 Tj보다 먼저 시작되었다면)
Tj를 철회(Wound).
그렇지 않으면 Ti는 대기(Wait)
'04.Database' 카테고리의 다른 글
DB 유형 - 그래프 DB (0) | 2020.06.04 |
---|---|
데이터 모델링 - 스키마 - 외부, 개념, 내부 (아키텍처) (0) | 2020.06.04 |
동시성 제어(Concurrency) (0) | 2020.06.04 |
동시성 제어 - 낙관적 검증기법 (0) | 2020.06.04 |
분산 DB (0) | 2020.06.04 |