DB/Transaction

Concurrency Control(동시성 제어) - Serializability

bongveloper 2023. 9. 21. 23:30

이번 시간부터 트랜잭션의 Concurrency Control(동시성 제어)에 대해서 알아보도록 하겠습니다.

먼저 이 글은 쉬운코드 님의 Concurrency Control을 정리한 글입니다.

(1부) concurrency control 기초 : schedule과 serializability. 트랜잭션들이 동시에 실행될 때 isolation을 보장하는 기초 이론

 

Concurrency Control에 대해서 알아보려면 Serializability와 Recoverability에 대해서 먼저 알아보야하는데

왜냐하면 Concurrency Control Serializability와 Recoverability을 제공하기 때문입니다.

그중에서도 Serializability에 대해서 알아보도록 하겠습니다.

 

Serializability


동시에 실행되는 트랜잭션 간에 상호 충돌이 없는 상태를 의미합니다.

Serializability를 이해하려면 Schedule과 Conflict를 이해해야 그 의미를 이해할 수 있습니다.

 

 

 

Schedule


데이터베이스에서 여러 트랜잭션이 동시에 실행될 때 나타내는 개념입니다.

 

Schedule 표현법

스케줄은 이렇게 표현이 가능합니다.

읽기 : r트랜잭션 순서(데이터) - r1(data) 

쓰기 : w트랜잭션 순서(데이터) - w1(data)

커밋 : c트랜잭션 순서 - c1

읽고 쓰고 커밋하는 스케줄을 나타내보면 r1(data) - w1(data) - c1(data)로 스케줄을 나타낼 수 있고 하나하나를 Operation이라고 부릅니다.

 

Schedule 종류

스케줄의 종류는 2가지가 있습니다.

 

Serial Schedule

트랜잭션들이 겹치지 않고 한 번에 한 트랜잭션씩 실행되는 스케줄입니다.

무결성은 유지되나 좋은 성능을 유지할 수 없는 방법입니다.

 

Nonserial Schedule
트랜잭션들이 겹쳐서 실행 되는 스케줄입니다.
트랜잭션들이 겹처서 실행되기 때문에 동시성이 높아져서 같은 시간 동안 더 많은 트랜잭션들을 처리할 수 있지만 무결성 보장이 되지 않을 수 있습니다.

Schedule 종류

 

좋은 성능을 유지하면서 무결성을 유지하려면

Serial Schedule 하면서도 Non-Serial Schedule인 트랜잭션들을 실행하게 된다면 좋은 성능을 유지하면서 무결성을 유지할 수 있습니다.

이것을 Conflict Serializable이라고 부르고 Conflict Serializable 한 스케줄이 오늘의 목표입니다.

 

Conflict


두 개 이상의 트랜잭션이 동일한 데이터에 접근을 할 때 서로 간섭하거나 경쟁하는 상황을 의미합니다.

 

Conflict 조건

  • 트랜잭션은 서로 달라야 한다.
  • 같은 데이터에 접근해야 한다.
  • 최소 하나는 write Operation 이여야 하고 순서는 상관이 없다.

이 조건을 만족하면 우리는 트랜잭션들이 Conflict 하다고 이야기할 수 있습니다.

 

Conflict 종류

  • Read-Write Conflict (읽기-쓰기 충돌) : 
    같은 데이터를 서로 다른 트랜잭션이 하나는 읽고 하나는 쓰고 있다면 Read-Write Conflict이라고 부릅니다.
    (순서는 상관없습니다.)
  • Write-Write Conflict (쓰기-쓰기 충돌) :
    같은 데이터를 서로 다른 트랜잭션이 하나는 쓰고 하나도 쓰고 있다면 Write-Write Conflict이라고 부릅니다.
    (순서는 상관없습니다.)

Conflict에서 주의 점은 Conflict Operation의 순서가 서로 바뀌면 결과가 변경됩니다.

Ex) w-r conflict가 r-w conflict로 변경된다면 당연히 데이터의 결과가 변경될 수밖에 없습니다.

 

Conflict 한 스케줄에서 서로 의미가 같은 Conflict한 스케줄을 찾아야 Serial Schedule하면서도 Non-Serial Schedule인 스케줄을 찾아 좋은 성능을 유지하면서 무결성을 유지하는 스케줄을 찾아낼 수 있습니다.

서로 의미가 같은 것을 Conflict Equivalent이라고 부릅니다.

 

Conflict Equivalent


트랜잭션 스케줄에서 2개의 Conflict한 스케줄이 동등하다는 의미입니다.

 

Conflict Equivalent 조건

Conflict Equivalent의 조건은 2가지입니다.

  • 두 스케줄은 같은 트랜잭션을 가져야 한다.
  • 데이터 읽기와 쓰기 Operation의 순서가 모두 동일하다.

여기서 2번째 조건이 살짝 어려운데 간단하게 이야기하면

스케줄 1이 r1(data) - w2(data)의 순서로 진행된다면 스케줄 2도 r1(data) - w2(data)의 순서로 진행되어야 Conflict Equivalent 하다고 이야기할 수 있고 만약 하나의 스케줄이라도 w2(data) - r1(data)로 진행된다면 Conflict Equivalent 하지 않습니다.

위의 사진과 같이 r2(y) - w1(y)가 같으니 이 스케줄은 Conflict Equivalent 한 스케줄이라고 볼 수 있습니다.

Conflict Equivalent까지 알아보았다면 오늘의 목표인 Conflict Serializable까지 알아볼 수 있습니다.

 

Conflict Serializable


한 Schedule이 Serial Schedule과 Conflict Equivalent 하다면 Conflict Serializable 한 스케줄이고

Schedule이 Serializability 하다라고 말할 수 있습니다.

 

먼저 보았던 예시와 같이 스케줄 2는 Serial schedule이고 Schedule1은 Non-Serial Schedule이지만 Conflict Equivalent 하기 때문에 스케줄 1은 스케줄 2처럼 동작한다고 볼 수 있는 것입니다.

그래서 Schedule1은 Serializability 한 스케줄입니다.

 

 

출처 : 
(1부) concurrency control 기초 : schedule과 serializability. 트랜잭션들이 동시에 실행될 때 isolation을 보장하는 기초 이론