{ CS Concepts } Transaction isolation level

Transaction isolation level


  • 트랜잭션 격리 수준은 데이터베이스 관리의 기본 개념으로, 트랜잭션 무결성이 유지방식과 동시 트랜잭션이 서로 상호 작용하는 방식을 제어한다.
  • 격리 레벨이 높을수록 데이터를 보호하기 위하여 더 많은 규칙이 적용되는데 이에 대한 대가로 데이터 잠금 및 차단이 증가하여 데이터베이스 성능이 저하될 수 있다.
  • “Read” 라는 용어는 데이터베이스에서 데이터를 검색하거나 액세스하는 트랜잭션 작업을 의미한다.
  • 데이터베이스 작업에는 일반적으로 읽기(데이터 쿼리, 검색 또는 보기)와 쓰기(데이터 삽입, 업데이트, 삭제) 로 두 가지 기본 작업으로 나눠짐.
  • 즉 격리 수준은 이 읽기 작업이 다른 동시 트랜잭션, 특히 읽고 있는 데이터를 수정할 수 있는 트랜잭션과 상호 작용하는 방식을 결정한다.
  • 네가지 표준 격리 수준

Read Uncommitted

  • 가장 낮은 격리 수준으로 트랙잭션은 다른 트랜잭션에 의해 아직 커밋되지 않은 데이터를 읽을 수 있으며 이로 인하여 ‘더티읽기’ 가 발생 할 수 있다.
  • 최소한의 잠금으로 인해 최고의 성능을 제공하지만 데이터 무결성은 가장 낮다.

Read Committed

  • 트랜잭션이 커밋된 데이터만 읽도록 보장하여 더티읽기를 방지, 즉 다른 트랜잭션에 의한 모든 변경 사항은 커밋된 후에만 표시된다.
  • 일반적인 데이터베이스의 기본 수준이며 데이터 무결성과 성능 간의 균형을 제공한다.

Repeatable Read

  • 이 수준에서는 트랜잭션이 데이터를 읽으면 첫 번째 트랜잭션이 완료될 때까지 다른 트랜잭션이 해당 데이터를 수정하거나 삭제할 수 없습니다.
  • 이는 반복 불가능한 읽기 (트랜잭션이 동일한 행을 두 번 읽고 매번 다른 데이터를 찾는 경우)를 방지하지만 팬텀 읽기(트랜잭션에서 다른 트랜잭션에 의해 추가된 새 행을 볼 수 있는 경우)는 허용할 수 있습니다.

Serializable

  • 최고 수준의 격리, 트랜잭션의 완전한 격리를 보장하고 실행을 효과적으로 직렬화한다.
  • 다른 트랜잭션은 현재 트랜잭션에 영향을 미칠 수 있는 데이터를 수정, 삭제 또는 삽입할 수 없습니다.
  • 이 수준은 더티 읽기(dirty read), 반복 불가능한 읽기 및 팬텀 읽기(phantom read)를 방지
  • 동시 트랜잭션을 실질적으로 순차적으로 만드는 광범위한 잠금으로 인해 성능에 큰 영향을 줄 수 있음

격리 수준 선택은 애플리케이션의 특정 요구 사항에 따라 다르다. 데이터 무결성이 중요한 경우에는 더 높은 격리 수준이 바람직하고 성능과 처리량이 더 중요하고 애플리케이션이 덜 엄격한 데이터 일관성을 허용할 수 있는 경우 더 낮은 격리 수준을 사용