본문 바로가기
CS/데이터베이스

데이터베이스 동시성과 격리 수준

by taeung515 2025. 6. 27.

DB 동시성과 격리 수준

Transaction

  • 더 이상 나눌 수 없는 작업의 최소 단위
  • (DB) Query들의 집합 / (Server) 메소드들의 집합

ACID

  • Atomicity - 원자성
    • 트랜잭션 내의 작업들은 모두 성공하거나 모두 실패해야한다
  • Consistency - 일관성
    • 트랜잭션 Commit 이후 DB는 항상 일관된 상태여야한다.
    • DB에 정의된 제약조건을 준수해야합니다.
  • Isolation - 격리성
    • 여러 트랜잭션이 동시에 진행될 때, 서로 간섭하지 않고 독립적으로 실행되어야 한다.
  • Durability - 지속성
    • 트랜잭션이 Commit된 결과는 영구히 저장되어야 한다.

DB 격리 수준

동시성 문제(격리를 제대로 하지 않았을 때)

  • Dirty Read
    • 특정 트랜잭션이 끝나지 않았음에도 불구하고 다른 트랜잭션에서 임시결과의 값을 읽어버리는 문제

  • Non-Repeatable Read
    • 한개의 트랜잭션 내에서 동일한 데이터를 여러번 읽었을 때 다른 트랜잭션의 결과로 인해 결과가 달라지는 문제

  • Phantom Read
    • 트랜잭션B가 특정 범위의 행을 읽고 다른 트랜잭션 A가 데이터를 추가 후, B가 동일 조건으로 다시 조회를 할때 새로운 데이터가 조회되는 현상

격리수준(Isolation Level) 종류

  • READ UNCOMMITED
    • 트랜잭션 A가 커밋하기 전에 다른 트랜잭션 B가 그 내용을 읽을 수 있다.(독립성 보장 X)
      • Dirty Read, Non-Repeatable Read, Phantom Read 발생
  • READ COMMITED
    • 커밋이 완료된 데이터만 읽을 수 있다
      • Dirty Read 방지 / Non-Repeatable Read, Phantom Read 발생
    • Oracle, MSSQL, PostgreSQL 등의 기본정책

    • REPEATABLE READ(멱등성! 보장)
      • 자신보다 낮은 트랜잭션 번호를 갖는 트랜잭션이 커밋한 데이터만 읽을 수 있다.
        • Dirty Read, Non-Repeatable Read 방지 / Phantom Read 발생
      • MySQL, InnoDB의 기본 정책
        • MySQL은 MVCC정책에 의해 사실상 Phantom Read 방지

  • SERIALIZABLE
    • 가장 높은 격리 수준
    • Lock를 통해 모든 트랜잭션이 순차적으로 실행되도록 한다.
      • Dirty Read, Non-Repeatble Read, Phantom Read 방지
    • 한번에 한번씩 성능저하 안씀

'CS > 데이터베이스' 카테고리의 다른 글

Lock  (0) 2025.06.27