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

Doyeon Lim·2022년 5월 8일
0

데이터베이스

목록 보기
6/6

한빛아카데미 - 데이터베이스 개론 2판

트랜잭션이란?

트랜잭션 transaction : 논리적인 작업의 단위로, 하나의 작업을 수행하는 데 필요한 데이터베이스의 연산들을 모아놓은 것

데이터베이스에 장애가 발생했을 때 데이터를 복구하는 작업의 단위도 된다.

트랜잭션의 특성 ACID

원자성 Actomicity

원자성 : 트랜잭션을 구성하는 연산들이 모두 정상적으로 실행되거나 하나도 실행되지 않아야 한다. (all-or-nothing)

일관성 Consistency

일관성 : 트랜잭션이 성공적으로 수행된 후에도 DB가 일관된 상태를 유지해야한다.

격리성 Isolation

격리성(고립성) : 현재 수행 중인 트랜잭션이 완료될 때까지 트랜잭션이 생성한 중간 연산 결과에 다른 트랜잭션이 접근할 수 없다.

지속성 Durability

지속성(영속성) : 트랜잭션이 성공적으로 완료된 후 DB에 반영한 수행 결과는 어떠한 경우에도 손실되지 않고 영구적이어야 한다.

트랜잭션 상태

  1. 활동 상태 active : 트랜잭션이 수행되기 시작하여 현재 수행 중인 상태
  2. 부분 완료 상태 partially committed : 트랜잭션의 마지막 연산이 실행된 직후의 상태
  3. 완료 상태 committed : 트랜잭션이 성공적으로 완료되어 commit 연산을 실행한 상태
  4. 실패 상태 failed : HW/SW 문제, 트랜잭션 내부 오류 등 여러 이유로 장애가 발생하여 트랜잭션의 수행이 중단된 상태
  5. 철회 상태 aborted : 트랜잭션을 수행하는 데 실패하여 rollback 연산을 실행한 상태

트랜잭션 명령어

  • commit : 트랜잭션이 성공적으로 수행되었음을 선언(작업 완료) => 트랜잭션을 수행한 최종 결과를 DB에 반영

  • rollback : 트랜잭션을 수행하는 데 실패했음을 선언(작업 취소) => 트랜잭션이 지금까지 실행한 연산의 결과가 취소되고 이전의 산태로 돌아감

DB Isolation Level

트랜잭션에서 일관성 없는 데이터를 허용하는 수준

  1. Read Uncommitted [LOW]

    • SELECT 문장 수행시 해당 데이터에 Shared Lock 이 걸리지 않는 Level
    • 아직 commit 되지 않은 트랜잭션 A 의 데이터를 B가 SELECT 할 수 있음
    • 발생하는 문제 : dirty read, non-repeatable read, phantom read
  2. Read Commited

    • Select 문장이 수행되는 동안 데이터에 Shared Lock 이 걸린다
    • 아직 commit 되지 않은 트랜잭션 A 의 데이터를 B가 SELECT 할 수 없다
    • 발생하는 문제 : non-repeatable read, phantom read
  3. Repeatable Read

    • 트랜잭션 A가 시작되기 전에 커밋된 내용까지만 조회할 수 있다.
    • 자신의 트랜잭션 보다 낮은 트랜잭션에서 커밋된 것만 읽는다.(모든 InnoDB의 트랜잭션은 고유한 트랜잭션 시퀀스를 가지고 있으며 Undo 영역에 백업된 모든 레코드는 변경을 발생시킨 트랜잭션의 번호가 포함되어 있다)
    • 발생하는 문제 : phantom read
  4. Serializable [HIGH]

    • 트랜잭션이 완료될 때까지 다른 트랜잭션이 해당되는 영역에 대한 수정 및 입력을 할 수 없다.
    • 완벽한 LOCK 을 건다.
  • Dirty Read : committed 하지 않은 트랜잭션이 쓴 값을 읽는 것

  • Non-Repeatable Read : 한 트랜잭션에서 그 트랜잭션이 write연산을 수행하지 않음에도, 처음 읽은 값과 나중에 읽은 값이 다르게 되는 것

  • Phantom Read : 서로 간 tuple의 충돌이 없었음에도 불구하고 결과가 serialize하지 않게 값이 읽히는 것

참고

https://developyo.tistory.com/236
https://yeol-study-history.tistory.com/106

profile
🙇‍♀️ Android

0개의 댓글