SeoYeonBae / CS_study

:crown: 기술면접을 위한 공쥬들의 CS 짱터디 :pencil2:
0 stars 1 forks source link

트랜잭션의 격리 수준과 각 수준에서 발생할 수 있는 문제들에 대해 말해보세요. #56

Open SeoYeonBae opened 1 year ago

SeoYeonBae commented 1 year ago

📌 트랜잭션의 격리 수준이란?

📌 트랜잭션 격리 수준에 따라 발생할 수 있는 문제들

1. 더티 리드

2. 반복 불가능한 조회

3. 팬텀 리드

📌 트랜잭션 격리 수준 종류와 발생 문제

1. SERIALIZABLE (직렬화 가능)

2. REPEATABLE READ (반복 가능한 읽기)

3. READ COMMITTED (커밋된 읽기)

4. READ UNCOMITTED (커밋되지 않은 읽기)

📌 정리

더티 리드 반복 불가능한 조회 팬텀 조회
SERIALIZABLE (직렬화 가능) X X X
REPEATABLE READ (반복 가능한 읽기) X X O (MySQL은 거의 없음)
READ COMMITTED (커밋된 읽기) X O O
READ UNCOMITTED (커밋되지 않은 읽기) O O O
KangYoonjoo commented 1 year ago

트랜잭션 격리 수준

동시에 여러 트랜잭션이 처리될 때, 트랜잭션이 서로 얼마나 고립되어 있는지(잠금 수준)을 나타내는 것

레벨이 높아질 수록 트랜잭션 간 고립 정도 ↑, 성능 ↓


발생 문제

Dirty Read Non-Repeatable Read Phantom Read
Read Uncommitted O O O
Read Committed X O O
Repeatable Read X X O
Serializable X X X
jangyejoo commented 1 year ago

트랜잭션 격리수준

동시에 여러 트랜잭션이 처리될 때, 서로 얼마나 고립되어 있는지 그 잠금 수준을 나타냄 필요한 이유는 만약 완전히 locking 걸어버리면 하나의 트랜잭션이 끝날 때까지 기다려야 하므로 성능 저하

트랜잭션 격리 수준 종류와 발생 가능한 문제들

  1. read uncommitted
    • 타 트랜잭션에서 commit되지 않은 데이터도 참조 가능
    • 고립성 제일 낮음
    • rdbms 표준에서는 격리 수준으로 인정되지 않음
    • dirty read, non-repeatable read, phantom read 다 발생
  2. read committed
    • 타 트랜잭션에서 commit된 데이터만 참조 가능
    • 가장 많이 사용되는 격리 수준
    • undo 영역에 백업된 레코드에서 값을 가져옴
    • non-repeatable read, phantom read 발생
  3. repeatable read
    • 트랜잭션에 진입하기 이전에 커밋된 내용을 참조
    • 항상 같은 데이터를 응답하는 것을 보장
    • phantom read 발생
    • mysql
  4. serializable
    • 트랜잭션이 사용중인 테이블의 모든 행을 타 트랜잭션이 접근할 수 없도록 완전히 잠금
    • 가장 높은 정합성, 고립성 -> 성능 낮음