[DB] 동시성 제어(Concurrency control) 1편

Daekuen·2023년 8월 1일
0

Database

목록 보기
3/7
post-thumbnail
post-custom-banner

Concurrency control

성능을 고려하여 여러 트랜잭션들을 동시에 실행 시키고, 데이터베이스의 일관성(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가지 트랜잭션을 실행 시킬 때, 여러 형태의 실행이 가능할 수 있다.

Schedule

트랜잭션이 실행 될 때, 각 step은(read, write) operation이라 칭한다.
Schedule은 여러 트랜잭션들이 실행될 때, 각 트랜잭션에 속한 operation들의 실행 순서를 의미한다.

  • case1, case2는 트랜잭션이 겹치지 않고 한번에 하나씩 실행되는 serial schedule.
  • case3, case4는 두개의 트랜잭션이 동시에 실행되는 nonserial schedule.
  • serial이든 nonserial이든 각 트랜잭션 내의 operations들의 순서는 바뀌지 않는다.

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만원)

serial schedule

한 번에 하나의 트랜잭션만 실행되기 때문에 좋은 성능을 낼 수 없고, 현실적으로 사용할 수 없는 방식이다.

nonserial schedule

트랜잭션들이 겹쳐서 실행되기 때문에, 동시성이 높아져 같은 시간 동안 더 많은 트랜잭션들을 처리할 수 있다.
현실적으로 사용해야하는 방식.

Conflict

성능상의 이유로 nonserial schedule을 사용하면서 이상한 결과(case4)가 나오지 않기 위한 아이디어는 ?

serial schedule과 동일한(equivalent) nonserial schedule을 실행하자.

'schedule이 동일하다'의 의미가 무엇인지 정의하기 위해 나온 개념이 바로 Conflict이다.
두 operation이 아래 3가지 조건을 만족 했을 때, conflict operations 라고 할 수 있다.

  • 두 operation이 서로 다른 트랜잭션에 속해야 한다.
  • 같은 데이터에 접근해야 한다.
  • 최소 하나는 write operation.

    스케줄 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은 순서가 바뀌면 결과도 바뀌게 된다.

Conflict equivalent

두가지 schedule을 비교했을 때 아래 조건을 만족하면 Conflict equivalent하다고 말한다.

  • 비교하는 두 schedule은 같은 종류의 트랜잭션들을 가져야한다.
    ex) 트랜잭션A, 트랜잭션B
  • conflicting operations의 순서는 양쪽 schedule 모두 동일해야 한다.
    rB(H)-wA(H) / wB(H)-rA(H) / wB(H)-wA(H) 3개의 conflicting operations의 순서가 동일하게 실행되야 한다.

위의 두 조건을 만족한다면 위에서 말한 'schedule이 동일하다'라고 할 수 있다.

Conflict serializable

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편)

profile
오늘보다 나은 내일을 위해 노력하는 개발자.
post-custom-banner

1개의 댓글

comment-user-thumbnail
2023년 8월 1일

좋은 글 감사합니다. 자주 올게요 :)

답글 달기