[DB] 트랜잭션

2021. 5. 16. 09:59·DATABASE
728x90

정의 

  • 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 한꺼번에 모두 수행되어야하는 일련의 연산
  • ACID라 하는 원자성, 일관성, 격리성, 지속성을 보장해야함

ACID

  • 원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 마치 하나의 작업인 것처럼 모두 성공 or 모두 실패 해야함
  • 일관성(Consistency) : 모든 트랙잭션은 일관성 있는 데이터베이스 상태를 유지해야함 (무결성 제약조건을 항상 만족해야함)
  • 격리성(Isolation) : 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리 (동시에 같은 데이터를 수정하지 못하도록 함, 격리성은 동시성과 관련된 성능 이슈로 인해 격리수준을 선택할 수 있음)
  • 지속성(Durability) : 트랜잭션을 성공적으로 끝내면 결과가 항상 기록되어야 함 중간에 시스템에 문제가 발생해도 데이터베이스 로그 등을 사용해서 성공한 트랜잭션 내용을 복구해야함

트랜잭션간에 격리성을 완벽히 보장하려면 트랜잭션을 차례대로 실행해야함, 이럴경우 동시성 처리 성능 기능 이 나빠짐 이러한 문제로 인해서 격리수준 4단계를 나누어서 정의함 


격리수준 

  • READ UNCOMMITED : 커밋되지 않은 읽기
  • READ COMMITED : 커밋된 읽기
  • REPEATABLE READ : 반복 가능한 읽기
  • SERIALIZABLE : 직렬화 가능

격리 수준이 낮을 수록 동시성은 증가하지만, 수준이 낮을 수록 다양한 문제가 발생함


격리 수준에 따른 문제점 

격리 수준 DIRTY READ NON-REPEATABLE READ PHANTOM READ
READ UNCOMMITED O O O
READ COMMITED   O O
REPEATABLE READ     O
SERIALIZABLE      
  • READ UNCOMMITED :  커밋하지 않은 데이터를 읽을수 있음 
  • READ COMMITED : 커밋한 데이터만 읽을 수 있음
  • REPEATABLE READ : 한 번 조회한 데이터를 반복해서 조회해도 같은 데이터가 조회
  • SERIALIZABLE : 가장 높은 격리 수준, 동시성 처리 성능이 떨어질 수 있음

격리 수준 설명 예시

  • DIRTY READ : 트랜잭션 A가 데이터를 수정하는데, 트랜잭션 B가 수정중인 데이터 조회
  • NON-REPEATABLE READ : 트랜잭션 A가 a를 조회중인데, 트랜잭션 B가 a를 수정하고 커밋하면, 트랜잭션 A가 다시 조회했을 때 수정된 데이터가 조회, 반복해서 같은 데이터를 읽을 수 없는 상태를 나타냄 
  • PHANTOM READ : 트랜잭션 A가 학생 A반 그룹인 회원 a를 조회했는데, 트랜잭션 B가 학생 A반 그룹에 b,c를 추가하고 커밋하면, 트랜잭션 A가 조회했을 때 회원 하나가 추가된 상태로 조회, 반복조회시 결과 집합이 달라지는 것을 나타냄

애플리케이션은 동시성 처리가 중요하기 때문에 데이터베이스들은 보통 READ COMMITED 격리 수준을 기본으로 사용 

저작자표시

'DATABASE' 카테고리의 다른 글

[DB] REPLICATION(리플리케이션)  (0) 2021.11.13
[DB] 쿼리 처리 과정  (0) 2021.06.26
[DB] 인덱스 (INDEX)  (0) 2021.06.24
[DB] 샤딩  (0) 2021.06.02
[MySQL] 쿼리 튜닝 기초  (0) 2020.12.15
'DATABASE' 카테고리의 다른 글
  • [DB] 쿼리 처리 과정
  • [DB] 인덱스 (INDEX)
  • [DB] 샤딩
  • [MySQL] 쿼리 튜닝 기초
집한구석
집한구석
  • 집한구석
    tgyun615.info
  • 전체
    오늘
    어제
    • 카테고리 (183)
      • JAVA (38)
      • SPRING (15)
      • KOTLIN (23)
      • NETTY (1)
      • DEVOPS (3)
      • DOCKER (7)
      • KUBERNETES (2)
      • JAVASCRIPT (1)
      • SPLUNK (3)
      • ELK (7)
      • KAFKA (2)
      • GO (4)
      • ALGORITHM & DATA STRUCTURE (9)
      • IDE (5)
      • OS (16)
      • NETWORK (14)
      • GCP (2)
      • AWS (2)
      • DATABASE (10)
      • CLEANCODE (7)
      • OTHER (12)
  • 최근 글

  • 태그

    Kafka
    go
    splunk
    java
    docker
    프로그래머스
    자바
    코틀린
    cleancode
    SQL
    ElasticSearch
    IntelliJ
    클린코드
    이펙티브코틀린
    이펙티브 코틀린
    Elk
    AWS
    JPA
    엘라스틱서치
    Spring
  • 링크

    • github
    • linkedin
    • resume
  • hELLO· Designed By 정상우. v4.10.3
집한구석
[DB] 트랜잭션
상단으로

티스토리툴바