- MySQL 문법을 기준으로 서술한다.
Schedule
- 여러 transaction들이 동시에 실행될 때 각 transaction에 속한 operation들의 실행 순서
- 이때 각 transaction 내의 operations들의 순서는 바뀌지 않는다.
Serial schedule
- transaction들이 겹치지 않고 한 번에 하나씩 실행되는 schedule
- 성능 : 한 번에 하나의 transaction만 실행되기 때문에 좋은 성능을 낼 수 없고 현실적으로 사용할 수 없는 방식이다.
Non-Serial schedule
- transaction들이 겹쳐서(interleaving) 실행되는 schedule
- 성능 : transaction들이 겹쳐서 실행되기 때문에 동시성이 높아져서 같은 시간 동안 더 많은 transaction들을 처리할 수 있다.
- 단점 : transaction들이 어떤 형태로 겹쳐서 실행되는지에 따라 이상한 결과가 나올 수 있다.
Conflict란?
- 아래의 세 가지 조건을 모두 만족하면 conflict
- 서로 다른 transaction 소속
- 같은 데이터에 접근
- 최소 하나는 write operation
- conflict operation은 순서가 바뀌면 결과도 바뀐다.
- read-write conflict, write-write conflict 등이 존재한다.
Conflict equivalent
- 두 조건 모두 만족하면 conflict equivalent
- 두 schedule은 같은 transaction들을 가진다.
- 어떤(any) conflicting operations의 순서도 양쪽 schedule 모두 동일하다.
Conflict Serializable
- serial schedule과 conflict equivalent일 때를 정의하는 용어이다.
- non-serial 스케줄의 경우의 수 중에 Conflict Serializable인 것들은 정상적인 결과를 낼 수 있다.
non-serial schedule로 인한 문제 해결책
- conflict serializable한 non-serial schedule은 허용하자
- 실제 DBMS의 구현
- 여러 transaction을 동시에 실행해도 schedule이 conflict serializable하도록 보장하는 프로토콜을 적용하자 -> 이러한 제어를 concurrency control라고 한다.