병행 제어란 무엇인가?
- 병행 제어(Concurrency Control)란 다중 프로그램의 이점을 활용하여
동시에 여러 개의 트랜잭션을 병행수행할 때,
동시에 실행되는 트랜잭션들이 데이터베이스의 일관성을 파괴하지 않도록
트랜잭션 간의 상호작용을 제어하는 것이다.
다중 프로그램의 이점
-
프로세서의 이용률이 증가한다.
-
전체 트랜잭션의 작업 처리율이 향상된다.
병행 제어의 목적
-
데이터베이스의 공유를 최대화한다.
-
시스템의 활용도를 최대화한다.
-
데이터베이스의 일관성을 유지한다.
-
사용자에 대한 응답시간을 최소화한다.
병행수행과 직렬성
-
다중 프로그램 환경에서 여러 개의 트랜잭션을 병행수행한다는 것은
같은 시간에 여러 개의 명령을 동시에 실행한다는 것이 아니라,
시분할이나 입ㆍ출력 인터럽트 기법 등을 이용하여
일정한 시간 내에 각 트랜잭션에 있는 명령들이 시간적으로 번갈아 실행되는 것이다. -
병행 수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 수행시켰을 때의 결과와 같아야 하는데,
이를 직렬성(Serializability) 또는 직렬화 가능성이라 한다.
병행 제어 기법의 종류
- 로킹 기법
- 하나의 트랜잭션이 데이터를 액세스하는 동안 다른 트랜잭션은 그 데이터를 액세스할 수 없게 하는 방법
- 타임 스탬프(time stampe) 기법
- 트랜잭션 간의 순서를 미리 정하여 제어하는 방법
- 직렬화 기법이다.
- 직렬성 순서를 결정하기 위해 트랜잭션 간의 처리 순서를 미리 선택하는 기법들 중에서 가장 보편적인 방법이다.
- 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기전에 시간표(Time Stamp)를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법이다.
- 교착상태가 발생하지 않는다.
- 낙관적 기법
- 읽기 전용(Read Only) 트랜잭션이 대부분일 때 병행 제어를 하지 않아도 문제가 없는 점을 이용
- 검증과 확인하는 과정이 필요하여 검증 기법, 확인 기법이라고도 부른다.
- 병행 수행 하고자 하는 대부분의 트랜잭션이 판독 전용 트랜잭션일 경우,
트랜잭션 간의 충돌률이 매우 낮아서 병행 제어 기법을 사용하지 않고 실행되어도
이 중의 많은 트랜잭션은 시스템의 상태를 일관성 있게 유지한다는 점을 이용한 기법이다.
- 다중 버전 기법
- 타임 스탬프의 개념을 이용하는 기법으로, 다중 버전 타임 스탬프 기법이라고도 한다.
- 타임 스탬프 기법은 트랜잭션 및 데이터들이 이용될 때의 시간을 시간표로 관리하지만,
다중 버전 기법은 갱신될 때마다의 버전을 부여하여 관리한다.
병행 제어의 문제점
- 병행 제어(Concurrency Control)기법에 의한 제어 없이 트랜잭션들이 데이터베이스에 동시에 접근하도록 허용할 경우
다음과 같은 문제점이 발생한다.
문제점 | 의미 |
---|---|
갱신 분실 (Lost Update) |
- 연산결과의 일부가 없어지는 현상 - 두 개 이상의 트랜잭션이 같은 자료를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상 |
비완료 의존성, 임시 갱신 (Uncommitted Dependency) |
- 하나의 Transaction 수행이 실패 후 회복되기 전에 다른 Transaction이 실패한 갱신결과를 참조하는 현상 |
모순성(Inconsistency) 불일치 분석(Inconsistent Analysis) |
- 얻어진 결과가 일관성 없이 서로 다른 현상 |
연쇄 복귀 (Cascading Rollback) |
- 하나의 Transaction이 취소 됨으로 인해 연쇄적으로 다른 Transaction도 취소되는 현상 |