성능을 고려하여 여러 트랜잭션들을 동시에 실행 시키고, 데이터베이스의 일관성(consistency)을 해치지 않으며, 원하는 결과를 얻기 위해 트랜잭션을 제어하는 것을 의미한다.
Concurrency control에 대해 이해하기 위해서는, Schedule(serial schedule, nonserial schedule, Conflict(Conflict equivalent, Conflict serializable)에 대해서 알아야한다. 하나씩 차근차근히 정리하면서 알아가보자.
한 가지 케이스에 대해서 살펴보자
Keyword
schedule, conflict, conflict equivalent, conflict serializable
K가 H에게 20만원을 이체할 때, H도 ATM에서 본인 계좌에 30만원을 입금한다.
이런 경우 2가지 트랜잭션으로 나눌 수 있다.
1. 20만원 이체 트랜잭션 (트랜잭션A)
2. 30만원 입금 트랜잭션 (트랜잭션B)
위의 2가지 트랜잭션을 실행 시킬 때, 여러 형태의 실행이 가능할 수 있다.
트랜잭션이 실행 될 때, 각 step은(read, write) operation이라 칭한다.
Schedule은 여러 트랜잭션들이 실행될 때, 각 트랜잭션에 속한 operation들의 실행 순서를 의미한다.
operation 간소화
Schedule1 : rA(K)-wA(K)-rA(H)-wA(H)-c1-rB(H)-wB(H)-c2 (결과: 250만원)
Schedule2: rB(H)-wB(H)-c2-rA(K)-wA(K)-rA(H)-wA(H)-c1 (결과: 250만원)
Schedule3: rA(K)-wA(K)- rB(H)-wB(H)-c2-rA(H)-wA(H)-c1 (결과: 250만원)
Schedule4: rA(K)-wA(K)-rA(H)-rB(H)-wB(H)-c2-wA(H)-c1 (결과: 220만원)
한 번에 하나의 트랜잭션만 실행되기 때문에 좋은 성능을 낼 수 없고, 현실적으로 사용할 수 없는 방식이다.
트랜잭션들이 겹쳐서 실행되기 때문에, 동시성이 높아져 같은 시간 동안 더 많은 트랜잭션들을 처리할 수 있다.
현실적으로 사용해야하는 방식.
성능상의 이유로 nonserial schedule을 사용하면서 이상한 결과(case4)가 나오지 않기 위한 아이디어는 ?
serial schedule과 동일한(equivalent) nonserial schedule을 실행하자.
'schedule이 동일하다'의 의미가 무엇인지 정의하기 위해 나온 개념이 바로 Conflict이다.
두 operation이 아래 3가지 조건을 만족 했을 때, conflict operations 라고 할 수 있다.
스케줄 3을 예시로 들어보면.
Schedule3: rA(K)-wA(K)-rB(H)-wB(H)-c2-rA(H)-wA(H)-c1
rB(H)-wA(H) / wB(H)-rA(H) / wB(H)-wA(H) 총 3가지의 conflict가 존재한다
Conflict operation은 순서가 바뀌면 결과도 바뀌게 된다.
두가지 schedule을 비교했을 때 아래 조건을 만족하면 Conflict equivalent하다고 말한다.
위의 두 조건을 만족한다면 위에서 말한 'schedule이 동일하다'라고 할 수 있다.
nonserial schedule을 serial schedule과 비교했을 때, Conflict equivalent을 만족하면 Conflict serializable이라 한다.
결과적으로
Schedule3은 Conflict serializable 하고,
Schedule4는 Conflict serializable 하지 못하다. (Lost update가 발생했기 때문)
결과적으로 Conflict serializable한 nonserial schedule 이란 ??
nonserial schedule을 사용함으로써 성능적인 문제도 해결함과 동시에,
serial schedule과 동일한 결과를 얻을 수 있는 scheudle.
Concurrency control이 제공하는 serializable에 대해서 알아보았고
recoverability는 2편에서 이어집니다...~
Reference
쉬운코드(yotube) - 데이터베이스 시리즈 (Concurrency control 1편)
좋은 글 감사합니다. 자주 올게요 :)