[데이터베이스] 트랜잭션 본문

CS/데이터베이스

[데이터베이스] 트랜잭션

미니모아 2022. 4. 9. 15:35
반응형

트랜잭션

트랜잭션이란?

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

논리적인 작업 셋을 모두 완벽하게 처리하거나 또는 처리하지 못할 경우에는 원 상태로 복구해서 작업의 일부만 적용되는 현상이 발생하지 않게 만들어주는 기능으로 작업의 완전성을 보장해준다.

작업의 논리적 단위 또는 데이터들을 접근 또는 변경하는 프로그램의 단위가 된다.

트랜잭션과 Lock

잠금은 동시성을 제어하기 위한 기능이고 트랜잭션은 정합성을 보장하기 위한 기능이다. 잠금은 여러 커넥션에서 동시에 동일한 자원을 요청할 경우 순서대로 한 시점에는 하나의 커넥션만 변경할 수 있게 해주는 역할을 한다.

특성 ACID

Atomicity 원자성

트랜잭션 중간에 어떠한 문제가 발생한다면 트랜잭션에 해당 하는 어떤 작업 내용도 수행되어서는 안되며 아무런 문제가 발생되지 않았을 경우에만 모든 작업이 수행되어야한다.

모두 반영되도록 완료(commit) 되던지 전혀 반영되지 않도록 복구(Rollback)되어야 한다.

Consistency 일관성

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

Isolation 고립성

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

Durability 지속성

성공적으로 완료된 트랙잭션의 결과는 영구적으로 데이터베이스에 반영되어야 한다.

상태

  • Active : 트랜잭션이 실행 중이며 동작 중인 상태
  • Failed : 트랜잭션 실패 상태
  • Patially commited : commit 명령이 들어와서 commit만 남은 상태
  • committed : 완료 상태
  • aborted : 취소 상태

주의점

트랜잭션의 범위는 최소화하는 것이 좋다. 일반적으로 데이터베이스 커넥션은 개수가 제한적이다. 그런데 각 단위 프로그램이 커넥션을 소유하는 시간이 길어진다면 사용 가능한 여유 커넥션의 개수는 줄어들게 된다.

교착 상태

두 개 이상의 트랜잭션이 특정 자원의 잠금을 획득한 채 다른 트랜잭션이 소유하고 있는 잠금을 요구하면 아무리 기다려도 바뀌지 않는 상황이 되는데 이를 교착상태라고 한다.

해결방안

  • 트랜잭션을 자주 커밋한다.
  • 정해진 순서로 테이블에 접근한다.
  • 읽기 잠금 획득의 사용을 피한다
  • 한 테이블의 복수 행을 복수의 연결에서 순서 없이 갱신하면 교착 상태가 발생하기 쉽다. 이 경우에는 테이블 단위의 잠금을 획득해 갱신을 직렬화하면 동시성은 떨어지지만 교착 상태는 회피할 수 있다.
반응형
Comments