30. 병행 제어(Concurrency Control)

트랜잭션 병행 제어(Concurrency Control)
둘 이상의 트랜잭션을 수행하였을 때 발생하는 문제점을 극복하기 위해 제어하는 것

트랜잭션 병행할 때의 문제점
갱신 분실(Lost Update)
모순성(Inconsistency)
연쇄 복귀(Cascading Rollback)
비완료 의존성(Uncommitted Dependency)

트랜잭션 병행 제어의 목적
데이터베이스 일관성 유지
데이터베이스 공유 최대화
시스템의 활용도 최대화
사용자에 대한 응답시간 최소화

병행제어 기법
락킹(Locking), 타임 스탬프 순서화(Time stamp Ordering), 낙관적 기법, 다중 버전 기법

락킹(Locking)
하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션은 그 데이터를 액세스할 수 없게 하는 방법
트랙잭션은 데이터를 액세스하기 전에 Lock을 요청하고 액세스를 마치고 Lock을 해제
이미 Lock이 걸려 있을 때는 Lock이 풀리기 전에는 액세스할 수 없음
Locking 단위가 작으면 병행성 수준이 높아지며 대신 Locking 오버헤드는 증가합니다.

타임 스탬프 순서화(Time stamp Ordering)
트랜잭션 간의 순서를 미리 정하여 제어하는 방법
직렬화 기법입니다.

낙관적 기법
읽기 전용(Read Only) 트랜잭션이 대부분일 때 병행 제어를 하지 않아도 문제가 없는 점을 이용
검증과 확인하는 과정이 필요하여 검증 기법, 확인 기법이라고도 부릅니다.

다중 버전 기법
타임 스탬프 기법을 이용하며 버전을 부여하여 관리하는 기법