문제2) 데이터베이스 병행 제어 기법 및 필요성
답)
1. DB일관성을 위한 동시성 제어의 정의 및 필요성
정의
|
- 다수의 트랜잭션이 동일한 데이터에 동시에 접근하려고 할 때, 각 트랜잭션이 독립적으로 수행된 결과를 보장하는 기법
|
필요성
|
- 트랜잭션 처리 결과의 직렬성 보장, 동시 실행 트랜잭션 수를 최대화, 데이터 무결성 보장
- 병행 작업에 의해 발생할 수 있는 데이터 베이스의 비 일관성 방지
|
갱신손실
|
- 한 트랜잭션의 갱신을 다른 트랜잭션이 덮어써 갱신 무효화
|
현황파악오류
|
- 읽기 작업 트랜잭션이 쓰기 작업 트랜잭션의 중간 데이터를 읽어 일관성 손실
|
모순성
|
- 한 트랜잭션이 여러 데이터를 갱신하는 동안 다른 트랜잭션이 어떤 것은 갱신 전 값을 읽고 어떤 것은 갱신 후 값을 읽어 불일치 발생
|
연쇄복귀
|
- 한 트랜잭션이 Rollback 연산을 수행하는 도중 다른 트랜잭션 Rollback 될 데이터를 읽어 발생하는 오류
|
기법
|
설명항목
|
상세설명
|
Timestamp
|
정의
|
- 트랜잭션 순서를 미리 선정하는 시스템 전체에서 유일한 값(timestamp)을 기준으로 직렬 순서를 결정하는 기법
|
구현방법
|
시스템 시계
|
- 트랜잭션이 요청될 때 시스템 시간을 Timestamp로 활용
|
논리적 계수기
|
- 트랜잭션이 요청될 때마다 증가하는 시스템 내 계수기 활용
|
수행방식
|
쓰기 트랜잭션 T
|
|
읽기 트랜잭션 T
|
|
특징
|
- Locking이 없어 Deadlock 미 발생
- Locking과 Dead Lock 탐지에 소요되는 전송 오버헤드 감소
- 연쇄 복귀 (Cascading Rollback)는 보장하지 못함
|
Locking
|
정의
|
- 트랜잭션이 작업 수행을 위해 접근한 데이터에 다른 트랜잭션이 접 할 수 없도록 차단하는 독점적 제어 권한을 활용하는 기법
|
연산유형
|
공유 락 (Shared Lock)
|
- Write 없는 트랜잭션이 공유 락을 설정하고 다른 트랜잭션의 데이터 조회 허용. Write 포함된 트랜잭션은 락 해제 대기
|
독점 락 (Exclusive Lock)
|
- 독점 락을 설정한 트랜잭션에 read, write 권한 독점 부여 다른 트랜잭션 접근 불가하며 shared lock 도 설정 불가
|
수행방식 (2PL)
|
- Locking은 트랜잭션 내에서 lock 과 unlock이 섞여서 발생하면 직렬성 보장 불가
- Locking기법의 한계 보완을 위해 2-Phase Locking(2PL) 기법이 등장하였으며, lock수행 단계와 unlock 수행 단계 두 단계로 락킹 수행
|
|
특징
|
- Locking 단위 작을수록 오버헤드 증가, 공유성 높음
- Locking 단위 클수록 오버헤드 감소, 공유성 낮음
|
정의
|
- 같은 데이터를 동시에 수정하지 않을 것이라고 가정하고 트랜잭션 종료 시 다른 트랜잭션에 의하여 값이 변경되었는지 검증하는 기법
|
구현요소
|
판독단계(Read)
|
|
확인단계(Validation)
|
|
기록단계(Write)
|
- 간섭 있는 트랜잭션은 재실행, 간섭 없는 트랜잭션은 결과 쓰기 작업 수행
|
수행방식
|
- 트랜잭션의 실행을 3단계로 나누고, 단계별 Timestamp 설정
- 확인 검사 조건 3가지 중 하나 이상 만족하는 경우 트랜잭션 간 간섭이 없는 것으로 간주하고 쓰기 작업 수행
|
특징
|
- Deadlock 없음, 연쇄 복귀 없음, 순환적 재 시작 발생
|
다중버전 병행제어 구현방법
|
정의
|
- 여러 버전의 데이터 값을 저장하며 트랜잭션 시작 시점 이후 변경된 값을 발견하면 저장된 일관성 있는 버전(CR Copy)를 활용하는 기법
|
접근법
|
Multi Generation Architecture
|
- 데이터베이스에 다중 버전의 레코드를 저장, 불필요할 때 저장해둔 레코드 버림, PostgreSQL, FireBird, SQL Server 해당
|
Undo Segment Architecture
|
- 최신 버전의 데이터만 데이터베이스 내에 저장, Undo 를 이용해 이전 버전의 데이터를 재구성, Oracle, MySQL/InnoDB 해당
|
수행방식
|
- Multi Generation Architecture : Tuple을 update 할 때 New Tuple을 새롭게 추가하고 Old Tuple은 유효 범위를 마킹하여 처리
- Undo Segment Architecture : SCN이 더 최신인 블록은 Undo segment 에서 조회
|
특징
|
- Lock을 대기하지 않으므로 동시성 구현 뛰어남, 과거 버전 데이터 저장 및 I/O에 따른 오버헤드 증가
|
공감과 댓글은 아이티신비에게 큰 힘이 됩니다.
블로그 글이 유용하다면 블로그를 구독해주세요.♥