Transaction

uuuouuo·2022년 8월 22일
0

트랜잭션


  • 완전성을 보장해 주는 것
  • 논리적 작업 set을 모두 완벽하게 처리하는 기능
  • 만약 처리하지 못했을 경우 원 상태로 복구해 작업 일부만 적용되는 현상을 막는 기능
  • 사용자 입장 : 작업의 논리적 단위
  • 시스템 입장 : 데이터 접근 또는 변경하는 프로그램의 단위

🔎 Transaction과 Lock

  • 잠금(Lock) : 동시성 제어를 위한 기능

    • 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할
  • 트랜잭션 : 데이터 정합성 보장을 위한 기능

    • 하나의 논리적인 작업 셋 중 하나의 쿼리가 있든 두 개 이상의 쿼리가 있든 관계없이 논리적인 작업 셋 자체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장하는 것

트랜잭션의 특성


  • 트랜잭션은 ACID라는 4 가지 특성을 만족

1. 원자성(Atomicity)

  • 우린 하나! 조금만 문제 발생해도 수행되면 안됨, 아무런 문제가 발생되지 않았을 경우에만 모든 작업이 수행되어야 함

2. 일관성(Consistency)

  • 트랜잭션이 완료된 다음의 상태에서도 트랜잭션이 일어나기 전의 상황과 동일하게 데이터의 일관성을 보장해야 함

3. 고립성(Isolation)

  • 각각의 트랜잭션은 서로 간섭없이 독립적으로 수행되어야 함

4. 지속성(Durability)

  • 트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 함

트랜잭션을 사용할 때 주의할 점


  • 트랜잭션 범위를 최소화해야 함

    • 필요한 최소의 코드에만 적용하는 것이 좋음
  • 일반적으로 데이터베이스 커넥션은 개수가 제한적

    • 그런데 각 단위 프로그램이 커넥션을 소유하는 시간이 길어지면 사용 가능한 여유 커넥션의 개수는 줄어들게 됨
    • 그러다 어느 순간 각 단위 프로그램에서 커넥션을 가져가기 위해 기다려야 하는 상황이 발생할 수도 있음
  • 즉, 교착상태 발생

교착 상태란?

  • 두 개 이상의 트랜잭션이 특정 자원(테이블 or 행)의 잠금(Lock)을 획득한 채 서로 상대방 트랜잭션이 소유한 잠금을 요구해 무한정 기다리는 상황

교착 상태 빈도 낮추는 방법

1. 트랜잭션 자주 커밋하기
2. 정해진 순서로 테이블 접근하기
3. 읽기 잠금 획득 (SELECT ~ FOR UPDATE) 사용 피하기
4. 테이블 단위 Lock(잠금) 획득해 갱신 직렬화하기

0개의 댓글