Concurrency control - schedule, serializability

yurison·2023년 1월 14일
0

Concurrency control makes any schedule serializable


➡️ 코드 간소화 적용

Schedule

  • 여러 트랜잭션들이 동시에 실행될 때 각 트랜잭션에 속한 operation들의 실행 순서
  • 각 트랜잭션 내의 operation들의 순서는 바뀌지 않는다.

Serial schedule

  • 트랜잭션들이 겹치지 않고 한 번에 하나씩 실행되는 스케쥴
  • 한 번에 하나의 트랜잭션만 순차적으로 실행되므로 좋은 성능을 낼 수 없어 현실적으로 사용할 수 없는 방식

Nonserial schedule

  • 트랜잭션들이 겹쳐서(interleaving) 실행되는 스케쥴
  • 트랜잭션들이 겹쳐서 실행되므로 동시성이 높아져서 같은 시간 동안 더 많은 트랜잭션들을 처리할 수 있다.
  • 단점! : 트랜잭션들이 어떤 형태로 겹쳐서 실행되는지에 따라 이상한 결과를 초래할 수 있다. -> lost update

Conflict ( of two operations)

  1. 서로 다른 트랜잭션 소속
  2. 같은 데이터에 접근
  3. 최소 하나는 write operation
  • 세 가지 조건을 모두 만족하면 conflict이다.
  • read-write conflict, write-write conflict ...
  • conflict operation은 순서가 바뀌면 결과도 바뀐다.

conflict equivalent ( for two schedules)

  1. 두 스케쥴은 같은 트랙잭션들을 가진다.
  2. 어떤(any) conflicting operations의 순서도 양쪽 스케쥴 모두 동일하다.
  • 두 조건 모두 만족하면 conflict equivalent
  • Conflict Serializable : serial schedule과 conflict equivalent일 때

고민 : 성능 때문에 여러 트랜잭션들을 겹쳐서 실행할 수 있으면 좋다. 하지만 이상한 결과가 나오는 것은 싫다!
해결책 : conflict serializable한 nonserial schedule을 허용하자!
구현 : 여러 트랜잭션을 동시에 실행해도 스케쥴이 conflict serializable하도록 보장하는 프로토콜을 적용한다.

0개의 댓글