동시에 실행되는 여러 개의 트랜잭션이 작업을 성공적으로 마칠 수 있도록 트랜잭션의 실행 순서를 제어하는 기법
정의
-
트랜잭션의 Isolation 성질을 보면 트랜잭션을 독립적으로 만들어주었음
-
만약 여러 트랜잭션이 하나의 값을 접근을 한다면?
- 여러 개의 트랜잭션을 병행 수행한다는 것은 같은 시간에 여러 개의 명령은 동시에 실행하는 것이 아님
- 운영체제에서 여러 프로세스를 처리하는 것처럼, 트랜잭션에 정해진 시간을 할당해서 부여하다가 시간이 끝나면 다른 트랜잭션을 실행하는 방식
- 이때 많은 트랜잭션이 처리되는 과정에서 공통된 데이터를 조작할 가능성이 발생
⇒ 병행 수행된 각각의 트랜잭션 결과는 각 트랜잭션을 독자적으로 수행되었을 때 결과와 같아야 하는 직렬성을 만족해야 함

목적
- 데이터베이스 공유 최대화
- 시스템 활용도 최대화
- 데이터베이스 일관성 유지
- 응답시간 최소화
⇒ 일관성을 유지히지 못하면 일관성 유지를 위해 자원, 시간 비용이 발생
문제점
병행제어 없이 트랜잭션들이 데이터베이스에 접근하면 다음과 같은 문제 발생
- 갱신 분실 (Lost Update or Dirty Write)
- 두개 이상의 트랜잭션이 같은 데이터를 공유하여 갱신할 때 갱신 결과의 일부가 없어지는 현상
- 모순성 (Inconsistency or Non-repeatable Read)
- 한 트랜잭션 내에서 같은 쿼리를 두번 수행할 때, 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제함으로써, 두 쿼리 결과가 다른 비일관성이 발생하는 경우
- 연쇄 복귀 (Cascading Rollback)
- 병행 수행되던 트랜잭션들 중 어느 하나에 문제가 생겨 Rollback되는 경우 다른 트랜잭션들도 함께 Rollback 되는 현상
- 비완료 의존성 (Uncommitted Dependency or Dirty Read)
- 하나의 트랜잭션 수행이 실패한 후 회복되기 전 다른 트랜잭션이 실패한 갱신 결과를 참조
- Update 혹은 Insert 반영 전에 읽는 경우
교착상태