Skip to content

Latest commit

 

History

History
32 lines (31 loc) · 2.33 KB

transaction.md

File metadata and controls

32 lines (31 loc) · 2.33 KB

Transaction

  • 특징(acid)
    • 원자성(atomicity): 더 이상 분해가 불가능한 업무의 최소 단위로 전부 처리되거나 하나도 처리되지 않아야 함
    • 일관성(consistency): 트랜잭션이 수행되기 전과 후가 모두 일관된 상태여야 함
    • 격리성(isolation): 실행중인 트랜잭션의 중간 격과에 다른 트랜잭션이 접근할 수 없음
    • 영속성(durability): 트랜잭션이 완료되면 데이터베이스에 영구적으로 저장됨
  • 격리성
    • 문제점
      • dirty read: 다른 트랜잭션에 의해 수정됐지만 아직 커밋되지 않은 데이터를 읽는 것
      • non-repeatable read
        • 한 트랜잭션 내 같은 키를 가진 레코드를 2번 읽었는데, 그 사이 값이 변조되어 결과가 다르게 나타나는 현상
        • 1개의 열에 있는 데이터 값이 변경되는 케이스
      • phantom read
        • 한 트랜잭션 내 같은 쿼리를 2번 수행했는데, 첫 번째 쿼리에서 없던 레코드가 두 번째 쿼리에서 나타나는 현상
        • 다건을 요청할 때 데이터의 값이 변경되는 케이스
    • 수준
      • read uncommitted
        • 트랜잭션에서 처리 중인 아직 커밋되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
        • dirty read, non-repeatable read, phantom read가 발생할 수 있음
        • 정합성 문제가 있기때문에 권장 설정이 아님
      • read committed
        • 트랜잭션이 커밋되어 확정된 데이터만 다른 트랜잭션이 읽는 것을 허용
        • dirty read의 가능성을 막음
        • 커밋되지 않은 데이터는 실제 db 데이터가 아닌 undo 로그에 있는 이전 데이터를 가져옴
        • non-repeatable read, phantom read가 발생할 수 있음
      • repeatable read
        • 트랜잭션 내에 삭제/변경은 undo 로그에 넣어두고, 앞서 발생한 트랜잭션은 실제 데이터가 아닌 undo 로그에 있는 백업 데이터를 읽도록 함
        • 트랜잭션 중 값 변경을 일정한 값으로 처리할 수 있음
        • 삭제와 수정을 불일치하게 하던 non-repeatable read를 해결할 수 있음
      • serializable read
        • 트랜잭션 내 쿼리를 2번 이상 수행할 때 1번째 쿼리에 있던 레코드가 사라지거나, 새로운 레코드가 나타나지 않도록 설정