트랜잭션의 격리 수준 4단계

태규 최·2022년 4월 15일

Database

목록 보기
2/2

트랜잭션은 4가지 속성 ( ACID)를 보장해야 한다.

  • 원자성 : 트랜잭션 내에서 실행한 작업들은 하나의 작업인것처럼 모두 성공하거나 , 실패해야 한다.

  • 일관성 : 모든 트랜잭션은 일관성 있는 데이터베이스 상태를 유지해야 한다. 데이터베이스에서 정한 무결성 제약 조건을 항상 만족해야 한다.

  • 격리성 : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 동시에 같은 데이터를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 격리 수준을 고를 수가 있다.

  • 지속성 : 트랜잭션을 성공적으로 끝내면 그 결과가 항상 기록되어야 한다. 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 트랜잭션 내용을 복구해야 한다.

Read Uncommitted

  • 커밋하지 않은 데이터를 읽을 수 있다.
  • 트랜잭션 1이 수정중이고 커밋하지 않아도 트랜잭션 2가 데이터를 조회할 수 있다.

Read Committed

  • 커밋한 데이터만 읽을 수 있다.
  • Dirty read가 발생하지 않음
  • NON - Repeatable Read가 발생 할 수도 있다.
  • 트랜잭션 1이 회원 A를 조회 중인데 트랜잭션 2가 회원 A를 수정하고 커밋하면 트랜잭션 1이 다시 회원 A를 조회했을 때 수정된 데이터가 조회된다.
  • 같은 트랜잭션 안에서 다른 데이터가 조회 될 수도 있음.
  • row lock이 필요할 수도 있다.

Repeatable Read

  • 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 반복해서 조회된다.
    -Phantom read가 발생
  • 트랜잭션 1이 10살 이하의 회원을 조회했는데, 트랜잭션 2가 5살 회원을 추가하고 커밋하면 다시 조회 했을 때 회원 하나가 추가된 상태로 조회된다.
  • 반복 조회시 결과 집합이 달라지는 것을 PHANTOM READ라 한다.
  • table lock이 필요할 수도 있다.

Serializable

  • 가장 엄격한 트랜잭션 격리 수준
  • Phantom read가 발생하지 않음.
  • 동시성 처리 성능이 급격히 떨어질 수 있다.

대채로 어플리케이션 대부분은 동시성 처리가 중요해서 데이터베이스들은 보통 Read committed 수준을 기본으로 사용한다.

0개의 댓글