산타는 없다

트랜잭션(Transaction) 격리 수준(Isolation Level) 본문

Computer Science/데이터베이스

트랜잭션(Transaction) 격리 수준(Isolation Level)

LEDPEAR 2021. 4. 27. 23:45
반응형

동시에 여러 트랜잭션이 처리될 때 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터에 접근 여부를 결정하는 수준이다.

  1. READ UNCOMMITTED : 각 트랜잭션에서 변경 내용을 COMMIT하거나 ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있다. DIRTY READ 현상 발생
  2. READ COMMITTED(1단계) : 트랜잭션에서 변경 내용이 있지만 COMMIT이나 ROLLBACK 전에 볼 때 실제 테이블이 아닌 Undo 영역에 백업된 레코드 값을 봄
    하나의 트랜잭션내에서 똑같은 쿼리를 실행했을 때 항상 같은 결과를 가져와야하는데 COMMIT을 해버리면 다른 결과가 나오기 때문에 REPEATABLE READ의 정합성에 어긋난다.
  3. REPEATABLE READ(2단계) : 트랜잭션마다 트랜잭션 ID를 부여하여 트랜잭션 ID 보다 작은 트랜잭션 번호에서 변경한 것만 읽는다. Undo 공간에 백업해두고 실제 레코드 값을 변경. MVCC라고 부른다.
  4. SERIALIZABLE(3단계) : 가장 단순한 격리 수준이지만 가장 엄격한 격리 수준. 트랜잭션이 실행되기 전에 커밋된 내용만 조회할 수 있다.
  5. 이상현상
    • Dirty Read : 어떤 트랜잭션에서 아직 실행이 끝나지 않은 다른 트랜잭션에 의한 변경 사항을 보게 되는 경우. 만약 원래 트랜잭션에서 그 변경 사항을 롤백하면 그 데이터를 읽은 트랜잭션은 dirty 데이터를 가지고 있다고 말한다.
    • Non Repeatable Read : 다른 트랜잭션에서 변경한 내용 때문에 한 트랜잭션에선 항상 같은 결과를 가져와 하는 정합성에 어긋나는 상황
    • Phantom Read : 같은 쿼리를 두번 수행 시 첫번째 실행시에 없던 레코드가 갑자기 나오거나 사라지는 현상

 

Isolation Level Drity Read Non Repeatable Phantom Read
Read Uncommitted 가능 가능 가능
Read Committed 불가능 가능 가능
Repeatable Read 불가능 불가능 가능
Serializable 불가능 불가능 불가능

 

반응형
Comments