개요

가. 병행제어(동시성제어) 개념

개념 데이터베이스 시스템에서 여러 트랜잭션들이 직렬성을 보장하고 동시에 실행될 수 있도록 지원하는 기능

 

나. 병행제어의 직렬성 개념 및 용어

직렬성 개념 여러 트랜잭션이 동시에 실행될 때, 마치 순차적으로 실행된것처럼 데이터베이스의 일관성을 유지하는 성질
직렬성 용어 직렬 스케쥴 - 트랜잭션들이 겹치지 않고 춘차적으로 실행되는 스케쥴
직렬 가능 스케쥴 - 트랜잭션이 병행실행되어도 직렬 스케쥴과 동일한 결과를 내는 스케쥴
직렬성 격리 수준 - 데이터베이스에서 직렬성을 보장하는 가장 강력한 격리 수준
충동 직렬성 - 모든 충돌연산의 순서를 바꿔 직렬 스케쥴과 동일하게 만들 수 있는 스케쥴
 * 충돌 : 두 트랜잭션의 연산 순서를 변경했을떄, 결과가 달라지는 경우

 

동시성제어를 하지 않는 경우 발생하는 문제점

구분 개념 문제점
갱신손실
(Lost Update)
두 개 이상의 트랜잭션이 동일한 데이터 항목을 동시에 갱신할 때, 먼저 수행된 갱신 결과가 나중 갱신 결과에 의해 덮어써져 소실되는 현상
(둘이 같이 고치는데, 나중에 저장한 사람 것만 남아서 먼저 고친 내용이 없어지는 것)
데이터 변경 결과가 일부 반영되지 않아 정확성과 무결성이 훼손됨
현황파악오류
(Dirty Read)
어떤 트랜잭션이 아직 Commit되지 않은 다른 트랜잭션의 중간 갱신값을 읽는 현상
(아직 확정도 안 된 임시 계산값을 다른 사람이 보고 믿어버리는 것)
확정되지 않은 값을 기준으로 처리하여 잘못된 조회·판단·후속 처리 발생
모순성
(Inconsistency)
하나의 트랜잭션이 데이터를 읽는 도중 다른 트랜잭션이 일부 데이터를 변경하여, 동일 작업 내 조회 결과의 일관성이 깨지는 현상
(통장 잔액을 확인하는 중간에 누가 입금/출금해서 앞뒤 숫자가 안 맞는 것)
합계, 잔액, 통계 등 계산 결과가 실제와 다르게 나타남
연쇄복귀
(Cascading Rollback)
Rollback된 트랜잭션의 미확정 데이터를 참조한 다른 트랜잭션들까지 연속적으로 Rollback되는 현상
(잘못된 임시값을 믿고 작업한 사람들까지 전부 취소해야 하는 것)
하나의 장애가 여러 트랜잭션에 전파되어 시스템 안정성과 처리 효율이 저하됨

 

 

동시성 제어기법 정리

기법 핵심 내용
Locking 기법 데이터에 Lock을 걸어 다른 트랜잭션의 접근을 제한하는 상호배제 방식
(“내가 지금 이 데이터 쓰는 중이니까 잠깐 건들지 마” 하고 문을 잠그는 거)
2PL Lock/Unlock을 확장단계와 수축단계로 나누어 직렬성을 보장하는 Lock 기반 기법
(Locking을 조금 더 엄격하게 만들어서 “문 열기 시작하면 다시 잠그러 돌아가지 마” 같은 규칙)
타임스탬프 트랜잭션에 시간순서를 부여해 충돌 시 순서를 기준으로 제어하는 기법
(트랜잭션마다 번호표를 줘서 Lock처럼 기다리게하기보다는 "순서는 이미 정해져있어"라고 보는 방식)
낙관적 검증 충돌이 적다고 보고 일단 수행한 뒤 마지막에 충돌 여부를 검사하는 기법
(충돌이 자주 안 날 거야” 라고 보고 일단 트랜잭션을 다 실행하고 마지막에 문제없으면 반영, 있으면 취소)
MVCC 하나의 데이터에 여러 버전을 두어 읽기와 쓰기 충돌을 줄이는 기법

 

Locking 데이터에 Lock을 걸어 접근을 제어하는 기법 구현 단순, 상호배제 보장 / 교착상태 가능
2PL Lock과 Unlock을 2단계로 나누어 수행하는 기법 직렬성 보장 / 병행성 저하, Deadlock 가능
Timestamp 시간순서로 트랜잭션 수행을 제어하는 기법 Deadlock 없음 / Rollback 증가 가능
Validation 수행 후 종료 시점에 충돌 여부를 검사하는 기법 Lock 불필요, 충돌 적을 때 유리 / 충돌 많으면 재실행 증가
MVCC 여러 버전의 데이터를 유지하는 기법 읽기 성능 우수 / 버전 관리 부담

 

 

 

결론

시사점 동시성 제어는 다중 사용자 환경에서 데이터의 무결성과 일관성을 보장하기 위한 핵심 기술이며, 이를 적용하지 않을 경우 갱신손실, Dirty Read, 모순성, 연쇄복귀 등 이상현상이 발생하므로 필수적으로 고려되어야 한다.
결론형 동시성 제어는 데이터 무결성과 일관성을 확보하기 위한 필수 기술이며, 이상현상 방지와 성능 간 균형 속에서 업무 특성에 적합한 제어기법을 선택·적용하는 것이 중요하다.

 

+ Recent posts