낙관적 병행 수행 제어

낙관적 병행 수행 제어(Optimistic concurrency control, OCC), 낙관적 동시성 제어 또는 낙관적인 잠금(optimistic locking)은 관계형 데이터베이스 관리 시스템소프트웨어 트랜잭셔널 메모리와 같은 트랜잭션 시스템에 적용되는 동시성 제어 방식이다. OCC는 복수의 트랜잭션이 서로를 간섭하지 않고도 종종 완수될 수 있다고 가정한다. 실행 중에 트랜잭션은 이러한 자원들에 락(lock)을 획득하지 않은 채 데이터 자원을 사용한다. 커밋 전에 각 트랜잭션은 다른 트랜잭션이 읽힌 데이터를 수정하지 않음을 확인한다. 이 검사 도중 충돌되는 수정이 확인되면 커밋 중인 트랜잭션은 롤백되고 다시 시작이 가능하다.[1] 낙관적 병행 수행 제어는 H. T. Kung와 존 T. 로빈슨에 의해 처음 제안되었다.[2]

OCC는 낮은 데이터 경합 환경에 보통 사용된다. 충돌이 거의 없다면 트랜잭션은 락을 관리하는 비용 없이, 또 다른 트랜잭션의 락이 정리될 때까지 기다리는 일 없이 완수할 수 있어서 다른 동시성 방식들보다 더 높은 스루풋을 제공할 수 있다. 그러나 데이터 경합이 잦다면 반복적으로 재시작되는 트랜잭션의 비용으로 인해 상당한 성능 저하를 야기하며 여기서 다른 동시성 제어 방식들이 더 적절한 선택일 수 있다. 그러나 잠금 기반(비관적) 방식들 또한 낮은 성능을 전달할 수 있는데, 데드락을 회피하더라도 잠금이 과감하게 효율적인 동시성을 제한할 수 있기 때문이다.

각주 편집

  1. Johnson, Rohit (2003). 〈Common Data Access Issues〉. 《Expert One-on-One J2EE Design and Development》. Wrox Press. ISBN 978-0-7645-4385-2. 2011년 10월 8일에 원본 문서에서 보존된 문서. 
  2. H. T. Kung, J. T. Robinson (1981). “On Optimistic Methods for Concurrency Control” (PDF). ACM Transactions on Database Systems.