개발공부/데이터베이스

[DB] 데이터베이스 트랜잭션이란?

개발자 찐빵이 2021. 11. 8. 20:28
728x90

트랜잭션

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위.
한꺼번에 모두 수행되어야 할 일련의 연산들을 말한다.

트랜잭션 특징

  1. 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적 단위이다.
  2. 사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업단위이다.
  3. 하나의 트랜잭션은 Commit 되거나 Rollback 된다.

트랜잭션의 성질

  1. 원자성(Atomicity)
    트랜잭션의 연산은 데이터베이스에 모두 반영되든지 전혀 반영되지 않아야 한다.
    트랜잭션 내의 모든 명령은 반드시 완벽히 수행되어야 하며, 모두 완벽히 수행되지 않고 하나라도 오류가 발생하면 트랜잭션 전부가 취소되어야 한다.
  2. 일관성(Consistency)
    트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 변환한다.
    시스템이 가지고 있는 고정 요소는 트랜잭션 수행 전과 트랜잭션 수행 완료 후의 상태가 같아야 한다.
  3. 독립성(Isolation)
    둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 어느 하나의 트랜잭션 실행 중에 다른 트랜잭션의 연산이 끼어들 수 없다.
    수행 중인 트랜잭션은 완전히 완료될 때까지 다른 트랜잭션에서 수행 결과를 참조할 수 없다.
  4. 지속성(Durability)
    성공적으로 완료된 트랜잭션의 결과는 시스템이 고장 나더라도 영구적으로 반영되어야 한다.

트랜잭션 연산 및 상태

  1. Commit
    트랜잭션에 대한 작업이 성공적으로 끝났고 데이터베이스가 다시 일관된 상태에 있을 때, 트랜잭션이 행한 갱신 연산이 완료된 것을 트랜잭션 관리자에게 알려주는 연산이다.
  2. Rollback
    하나의 트랜잭션 처리가 비정상적으로 종료되어 데이터베이스의 일관성을 깨뜨렸을 때, 이 트랜잭션의 일부가 정상적으로 처리되었어도 원자성을 구현하기 위해 트랜잭션이 행한 모든 연산을 취소하는 연산이다.
    트랜잭션을 재시작하거나 폐기한다.

활동(Active) : 트랜잭션이 실행 중인 상태
실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
완료(Committed) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태

Partially Committed와 Committed의 차이점

Commit 요청이 들어오면 상태는 Partial committed 상태가 된다.
이후 Commit을 문제없이 수행할 수 있으면 Committed 상태로 전이되고, 만약 오류가 발생하면 Failed 상태가 된다.
즉, Partial committed는 Commit 요청이 들어왔을때를 말하며, Commited는 Commit을 정상적으로 완료한 상태를 말한다.

DB에서 교착 상태의 빈도를 낮추는 방법

트랜잭션을 자주 커밋한다.
트랜잭션들이 동일한 테이블 순으로 접근하게 한다.
읽기 잠금 획득 (SELECT ~ FOR UPDATE)의 사용을 피한다.
한 테이블의 복수 행을 복수의 연결에서 순서 없이 갱신하면 교착상태가 발생하기 쉽다.
이 경우에는 테이블 단위의 잠금을 획득해 갱신을 직렬화 하면 동시성을 떨어지지만 교착상태를 회피할 수 있다.

참고 사이트

트랜잭션
DB 정리

반응형