Databse - Isolation Level

Harry·2020년 12월 12일
0

DB

목록 보기
1/1

본 글은 Transaction Isolation level에 대하여 설명된 글을 정리한 공부 목적의 글입니다.

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

  • 동시에 여러 트랜잭션이 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할 지 말 지를 결정하는 것.

종류

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ
  • SERIALIZABLE

READ UNCOMMITTED

  • 각 트랜잭션에서의 변경 내용이 COMMIT / ROLLBACK 여부에 상관없이 다른 트랜잭션에서 값을 읽을 수 있다.
  • Postgresql 에서는 지원하지 않는다.

LOCK

  • SELECT 문장이 수행되는 동안 데이터에 Shared Lock이 걸린다 → 어떠한 사용자가 A라는 데이터를 B로 변경하는 동안 다른 사용자는 해당 데이터(B)에 접근할 수 없다.

문제점 [ DIRTY READ ]

  • 트랜잭션 작업이 완료되지 않았음에도 불구하고 다른 트랜잭션에서 볼 수 있게 되는 현상

READ COMMITTED

  • RDB에서 대부분 기본적으로 사용되고 있는 격리 수준
  • transaction 1 이 진행되는 중간에 transaction 2가 진행되지만, transaction 2 에서 조회시 해당 데이터는 COMMIT 이전의 데이터를 읽어온다.

LOCK

  • SELECT col1 FROM A WHERE {condition} 수행
    → 이 조건에 해당하는 데이터가 2건 존재 (col1 = 1/5)
    → 다른 사용자가 col1=1/5 인 Row에 대한 UPDATE 불가
  • 하지만 INSERT는 가능 ( 따라서 동일 트랜잭션에서 READ 되는 데이터 수가 달라질 수 있다. )

문제점 [ REPEATABLE READ ]

  • 트랜잭션에서 같은 질의를 사용했을 때 질의를 아무리 여러번 해도 그리고 다른 트랜잭션에서 아무리 여러 번 그 행을 변경해도 항상 같은 데이터만 읽어들이는 경우 → Repeatable Read라고 한다.
  • Repeatable Read가 요구되는 트랜잭션에서는 다른 트랜잭션에 의한 변경사항을 볼 수가 없다.
    • 변경사항을 보고 싶다면, 트랜잭션을 새로 시작해야 한다.

REPEATABLE READ

  • 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID보다 작은 트랜잭션 번호에서 변경한 것만 읽는다.

Serializable

  • 트랜잭션이 완료될 때까지 다른 사용자는 그 영역에 해당되는 데이터에 대한 수정 및 입력 불가

LOCK

  • INSERT 작업도 불가

출처
트랜잭션의 격리 수준(isolation Level)이란?
데이터베이스 Transaction Isolation Level

0개의 댓글