transaction

트랜잭션 (Transaction)

2024. 1. 22. 23:32

DBMS에서 데이터를 다루는 논리적인 작업의 단위

 
 

  • 트랜잭션을 정의하는 이유
    • DB에서 데이터를 다룰때 장애가 일어날 때 데이터를 복구하는 작업의 단위가 된다.
    • DB에서 여러 작업이 동시에 같은 데이터를 다룰 때 작업을 서로 분리하는 단위가 된다.

 

  • 트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다. (all or nothing)
    ex) 은행 이체 업무
BEGIN  
1\. A계좌에서 10,000원을 인출하는 UPDATE문  
2\. B계좌에서 10,000원을 입금하는 UPDATE문  
END  

 
 

  • 트랜잭션의 수행 과정
  1. 트랜잭션 1을 생성한다
  2. 트랜잭션 2를  생성한다
  3. T1의 값을 DB에서 주기억장치 버퍼로 읽어온다
  4. T2의 값을 DB에서 주기억장치 버퍼로 읽어온다
  5. T1에서 도서 가경을 7100원으로 업데이트 한다
  6. T2에서 도서 가격 +100원 값으로 업데이트 한다
  7. T1값을 주기억장치 버퍼에서 DB에 기록한다 (COMMIT) 
  8. T2값을 주기억장치 버퍼에서 DB에 기록한다 (COMMIT)

 

  • 트랜잭션의 성질 (ACID)
    • 원자성 (Atomicity) : 트랜잭션에 포함된 작업은 전부 수행되거나 전부 수행되지 않아야한다. all or nothing
    • 일관성 (Consistency) : 트랜잭션을 수행하기 전이나 후나 데이터베이스는 항상 일관된 상태를 유지해야한다.
    • 고립성 (Isolation) : 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터값을 훼손하는 일이 없어야한다.
    • 지속성 (Durability) : 수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야한다.

 

  • 동시성 제어 (concurrency control)
    • 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능 
상황트랜잭션1트랜잭션2발생문제동시 접근
상황1읽기읽기문제 없음허용
상황2읽기쓰기오손 읽기, 반복 불가능 읽기, 유령데이터 읽기허용/불가 중 선택
상황3쓰기쓰기갱신손실(절대 허용하면 안 됨)허용불가 (Lock을 이용)

 
 
 

  • 갱신 손실 (lost update)
    • 두개의 트랜잭션이 한 개의 데이터를 동시에 갱신(update)할 때 발생
    • 데이터베이스에서 절대 발생하면 안되는 현상
    • T2에서 잘못 된 결과를 만든 다음 T1의 갱신 작업을 무효화 하고 덧쓰기 작업을 수행하게 될 수 있다.
      이때 T1에서 갱신손실 문제 가 발생한다.

 

  • 락(Lock)
    • 갱신손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요하다
    • 데이터를 수정 중이라는 사실을 알리는 방법의 잠금장치이다
    • 공유락 (LS, shared lock) : 읽기
      배타락 (LX, exclusive lock) : 읽고 쓰기
요청 / 상태LS 상태LX 상태
LS 요청허용대기
LX 요청대기대기

 
 
 

'💻 IT > DB' 카테고리의 다른 글

일하면서 배운 MYSQL ++계속 추가  (0) 2024.05.16
mariadb sql문 (+생각 날 때 마다 추가 예정)  (0) 2024.02.29
데이터 모델링  (0) 2024.02.26

+ Recent posts