woowacourse-study / 2022-Real-MySQL

⚡️토르⚡️의 짜릿한 Real MySQL 뽀개기 🔨
9 stars 3 forks source link

Serializable에 대한 사실과 오해 #10

Open injoon2019 opened 2 years ago

injoon2019 commented 2 years ago

주제

격리 수준 4 단계에서 최고 수준인 Serializable에 대해 잘못 알고 있는 개념.

선정 이유

Serializable을 흔히 '트랜잭션끼리 동시성이 전혀 없는 것'이라고 생각하는데, 이는 Serializable과 Serial을 헷갈려서 그렇다.

해당 텍스트

조금 어려울 수도 있으니 3단계로 나눠서 원하는만큼만 알아가도 좋을듯!

Step 1. Serial과 Serailzable은 다르다. Serial이 한 트랜잭션이 끝나고 난뒤 다음 트랜잭션이 실행되는 것이다. Serializable은 데이터를 읽고, 마지막 쓰기를 하는 것에 관해 Serial과 실질적으로 동일한 효과를 내는 것이다.

Step 2. T1: R1(A) W1(A) R1(B) W1(B) T2: R2(A) W2(A) R2(B) W2(B)

T1T2 또는 T2T1으로 실행되면 Serial한 것이다 (Serial이 좀 더 제약이 많은 것이 Serial하면 Serailizable 하다, 반대로 Serializable하다고 Serial 하다고 할 수는 없다.)

Step 3. T1T2: R1(A) W1(A) R1(B) W1(B) R2(A) W2(A) R2(B) W2(B) T2T1: R2(A) W2(A) R2(B) W2(B) R1(A) W1(A) R1(B) W1(B)

아래는 Serializable할까? R1(A) W1(A) R2(A) W2(A) R1(B) W1(B) R2(B) W2(B)

T1T2와 동일하다. T1이 여전히 초기희 B를 읽고 있고, T2는 T1에 의해 변경된 B를 읽고 있기 때문이다.

R1(A) W1(A) R2(A) W2(A) R2(B) W2(B) R1(B) W1(B) T2T1은 절대 될 수 없다. T2T1에서 R1(A)는 W2(A)의 영향을 받는다. T1T2역시 될 수 없다. R2(B)가 변경되지 않은 것을 읽고 있다.

관련 페이지

183p

injoon2019 commented 2 years ago

트랜잭션에 대한 온전한 격리가 트래잭션이 사용하는 데이터에 대한 격리와 순서만 보장되면 serializable이라고 할 수 있다 - 매트-

HJ-Rich commented 2 years ago

설명 미쳤다.... 👍