본문 바로가기

기초 지식/DB

[DB] Transation Isolation Level

Transaction

트랜잭션(Transaction)이란, 데이터베이스의 상태를 변화시키기 위해서 수행하는 작업의 단위라고 할 수 있습니다.

여기서 단위라고 하다 보니 정해진 범위가 있을 것 같지만 사용자가 정할 수 있는 범위입니다.

 

따라서 아래의 트랜잭션의 4가지 특징을 지키는 선 안에서 수행이 되어야 성공적인 트랜잭션의 사용법이라고 할 수 있습니다.

  • 원자성 (Atomicity)
  • 일관성 (Consistency)
  • 독립성 (Isolation)
  • 지속성 (Durability)

 

하지만 개발을 하다 보면 효율적인 성능을 위해 굳이 다른 트랜잭션에서 데이터 참조를 막을 필요가 없을 수도 있습니다.

아니면, 절대로 참조가 되면 안 되게 설정해야 할 필요가 있겠죠. 그래서 이러한 점을 개발자가 어느 정도는 설정을 해주면 좋겠습니다. 여기서 필요한 것이 Isolation Level입니다.

 

Isolation Level

Transaction Isolation Level은 아래와 같이 4가지 종류가 있습니다.

  • Read Uncommitted
  • Read Committed
  • Repeatable Read
  • Serializable

Read Uncommitted

  • Commit 이전의 데이터는 다른 트랜잭션에서 접근할 수 있다.
  • Insert, Update, Delete 후 Commit이나 Rollback에 상관없이 현재의 데이터를 읽는다.
  • Lock이 발생하지 않는다.
  • Dirty Read, Non-repeatable Read, Phantom Read 현상 발생 가능

Read Committed

  • Oracle DBMS에서 Default로 사용하고 있는 Isolation Level
  • Commit 이후의 데이터만 다른 트랜잭션에서 조회할 수 있다.
  • 트랜잭션이 Commit이 안되어 있다면 다른 트랜잭션은 Undo 영역에 있는 기존 값을 참고하여 조회됨.
  • Non-repeatable Read, Phantom Read 현상 발생 가능

Repeatable Read

  • MySQL에서 Default로 사용하고 있는 Isolation Level
  • InnoDB Storage Engine은 트랜잭션의 Rollback에 대비해 Undo 공간에 레코드를 백업해두고 실제 레코드 값을 변경
  • 즉, 조회 시점에 Snapshot을 만들고 조회한다.
  • 동일 트랜잭션 내에서 일관성을 보장
  • record lock과 gap lock이 발생 가능

Serializable

  • 가장 강한 Isolation Level
  • Select 되는 모든 테이블에 Shared Lock이 발생
  • 동시성이 필요한 DB에는 거의 사용하지 않음

정리

이러한 Isolation Level을 알아두고 필요할 시 설정을 해서 사용하면 좋을 것 같습니다. (거의 건드릴 만한 일이 없을 것 같지만..)

 

 

반응형