동시성제어/병행제어(Concurrency Contrl)
1. 데이터베이스 무결성 확보를 위한, 동시성 제어 개요
1) 동시성 제어의 정의
- DBMS에서 동시에 작동하는 여러개의 트랜잭션이 작업을 성공적으로 종료하도록 실행순서를 제어하는 기법
- 다중 사용자 환경을 지원하는 데이터베이스 시스템에서 다수의 트랜잭션 작업이 성공적으로 실행될 수 있도록 지원하는 제어 기능
- 동시에 실행되는 다수의 트랜잭션 작업에서도 데이터베이스의 작업(입력, 수정, 삭제, 검색) 시 데이터의 무결성이 유지 되도록 제어하는 기법
2) 동시성 제어의 목적
- 일관성 측면 : 트랜잭션의 직렬 가능성을 확보하여 데이터의 일관성 보장, 데이터 무결성 보장
- 공용성 측면 : 시스템의 활용도, 공유 최대화, 사용자 응답시간 최소화
2. 동시성 제어 미처리 시의 문제점
구분 | 현상 | 설명 |
갱신 손실 (Lost Update) |
![]() |
- 트랜잭션들이 동일 데이터를 동시에 갱신할 경우 발생 |
현황파악오류 (Dirty Read) |
![]() |
-ㅠ트랜잭션의 중간 수행결과를 다른 트랜잭션이 참조함으로써 발생하는 오류 |
모순성 (Inconsistency) |
![]() |
- 두 트랜잭션이 동시에 실행할 때 DB가 일관성이 없는 상태로 남는 문제 |
연쇄복귀 (Cascading Rollback) |
![]() |
- 복수의 트랜잭션이 데이터 공유시 특정 트랜잭션이 처리를 취소할 경우 다른 트랜잭션이 처리한 부분에 대해 취소 불가능 |
- 경신손실, 현황파악오류, 모순, 연쇄복귀 발생으로 병행제어 필요
3. 동시성 제어 기법의 종류
1) 동시성 제어 기법
- 낙관적, 비관적으로 분류하여 동시성 제어 수행
2) 동시성 제어 기법의 종류
기법 | 개념도 | 작동방식 |
Locking 기법 | ![]() |
-트랜잭션이 사용하는 자원에 대하여 상호 배제 기능을 제공하는 기법 -공유 lock : 다른 트랜잭션도 읽기 실행 가능 -전용 lock : 다른 트랜잭션은 읽기, 기록 모두 불가 |
2PL (2 Phase Locking) |
![]() |
-확장단계 : 트랜잭션은 오직 lock만 수행 가능 -수축단계 : 트랜잭션은 오직 unlock만 수행 가능 -모든 트랜잭션들이 lock과 unlock연산을 확장 단계와 수축 단계로 구분하여 수행함 |
Timestamp Ordering |
![]() |
-시스템 시계 : 시스템 시간을 타임스탬프 값으로 부여 -논리적 계수기 : 트랜잭션 발생시마다 카운터를 하나씩 증가시켜 타임스탬프로 부여 -DB시스템에 들어오는 트랜잭션 순서대로 System Clock / Logical Counter 할당하고 순서를 부여하여 동시성 제어의 기준으로 사용 |
낙관적 검증기법 | ![]() |
-트랜잭션 수행 동안 트랜잭션을 위해 유지되는 데이터 항목들의 지역 사본에 대해서만 갱신이 이루어짐 -트랜잭션 종료 시 동시성을 위한 트랜잭션 직렬화가 검증되면 일시에 DB에 반영함 -트랜잭션 수행 동안은 어떠한 검사도 하지 않고, 트랜잭션 종료 시 일괄적 검사 기법 |
다중버전 동시성 제어 (MVCC) |
![]() |
-트랜잭션이 한 데이터에 접근하려 할 때, 그 트랜잭션의 타임스탬프와 접근하려는 데이터의 여러 버전의 타임스탬프를 비교하여, 현재 실행하고 있는 스케줄의 직렬 가능성이 보장되는 버전을 선택하여 접근하도록 하는 기법 -트랜잭션의 타임스탬프와 접근 데이터의 여러 버전 타임스탬프 비교하여 직렬 가능성이 보장되는 버전 선택 |
4. 동시성제어의 문제점 및 해결방안
1) 동시성제어의 분류
- Locking 해제 과정, 타임스탬프 부여에 따라 Deadlack, Rollback, 자원 낭비 등의 문제 발생
2) 동시성제어 문제점
기법 | 문제점 | 설명 |
Locking(2PL) | Deadlock 발생 | - 락킹과 해제과정 중 서로 교착상태 조건 충족시 서로 대기하는 상태 발생 |
Timestamp | 롤백 | - 타임스탬프 비교에 따른 롤백 |
낙관적 검증 | 자원낭비 | - 트랜잭션 마지막 단계에서 기록하는 낙관적 검증 기법은 자원낭비 문제 발생 |
MVCC | 롤백 | - 충돌문제는 대기가 아니라 복귀처리 함으로 연쇄 복귀초래 발생 가능성 |
- 문제점에 따라 선택적 기법 활용
3) 동시성제어 문제 발생 시 해결방안
- 타임스탬프 적용 시 Wait-die, Wond-wait 적용
비고 | Wait-die | Wound-wait |
정의 | 오래된 트랜잭션 기다리고, 새로운 트랜잭션이 Rollback 되고 다시 계획 | 오래된 트랜잭션이 새로운 트랜잭션을 rollback 시키고 이를 다시 계획 |
트랜잭션 양 | lock을 요청하는 단계 중에 abort되어 재시작되므로, abort되는 트랜잭션의 처리된 양이 적음 | 처리도중 높은 우선 순위 트랜잭션에 의해 abort되므로, 그 동안 처리된 일이 모두 무시되어 불필요한 작업 수행 |
공통점 | - 두 방법 모두 우선 순위가 높은 트랜잭션이 낮은 우선순위의 트랜잭션을 abort 시킴 - 중지된 트랜잭션은 기존 타임스탬프를 가지고 재시작 - 결국 시스템에서 가장 높은 우선 순위를 갖게 되어 완료됨 - 구현이나 관리가 waits-for graph보다 쉬움 |
'메가노트 > 토픽과제(정리)' 카테고리의 다른 글
데이터베이스 인덱스(이강욱 선임님) (0) | 2022.10.22 |
---|---|
정규화(이상희 부장님) (0) | 2022.10.22 |
데이터 회복(배준호 대리님) (0) | 2022.10.22 |
CMMi(이상희 부장님) (0) | 2022.10.15 |
소프트웨어 안전성 분석(문경숙 수석님) (0) | 2022.10.15 |