Transaction이란?

일단 해볼게·2023년 6월 15일
0

CS

목록 보기
9/10

Transaction이란?

  • 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위
    • 데이터베이스의 상태를 변경시킨다는 이야기는 SELECT, UPDATE, INSERT, DELETE 와 같은 행동을 의미
  • 논리적인 작업의 쿼리 개수와 관계 없이 트랜잭션으로 묶어놓은 작업 단위 전체가 100% 적용되거나 아무것도 적용되지 않아야 함을 보장

Transaction의 특징

  • Atomicity (원자성) : 트랜잭션을 구성하는 연산 전체가 모두 정상적으로 실행되거나 모두 취소되어야 한다.
  • Consistency (일관성) : 트랜잭션이 실행을 성공적으로 완료하면 언제나 일관성 있는 데이터베이스 상태로 유지한다.
  • Isolation (고립성) : 두 개 이상의 트랜잭션이 동시에 발생할 때, 서로의 연산에 영향을 주면 안 된다.
  • Durability (영구성) : 커밋된 트랜잭션의 내용은 영구히 반영된다.

Transaction 상태

  • 활동 (Active) : 트랜잭션이 실행 중인 상태
  • 장애 (Fail) : 트랜잭션이 실행에 오류가 발생해 중단한 상태
  • 철회 (Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback(트랜잭션 연산 이전의 상태로 돌아감) 수행하는 상태
  • 부분 완료 (Partitially Commit) : 트랜잭션이 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
  • 완료 (Committed) : 트랜잭션이 성공적으로 종료되어 commit 연산을 실행한 후의 상태

Transaction 격리 수준

  • Read Uncommitted
    • 트랜잭션에 처리중이거나, 아직 Commit되지 않은 데이터를 다른 트랜잭션이 읽는 것을 허용
    • SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리지 않음
    • 발생하는 현상 : Dirty Read, Non-Repeatable Read, Phantom Read
  • Read Committed
    • 커밋된 내용만 접근 가능
    • 발생하는 현상 : Non-Repeatable Read, Phantom Read
      A가 데이터를 읽는 트랜잭션, B가 데이터를 삽입하는 트랜잭션이다. B가 삽입을 하고 커밋을 해서 트랜잭션을 종료시켰는데 A는 아직 데이터를 읽는 트랜잭션 과정에 있다. 그러면 초기에 있던 데이터와 B가 커밋을 한 이후에 읽은 데이터가 달라서 Non-Repeatable Read 발생
  • Repeatable Read
    • 커밋이 완료된 데이터만 읽을 수 있으며, 트랜잭션 범위 내에서 조회한 내용이 항상 동일함을 보장
    • 공유락을 데이터 하나에 건다.
    • 발생하는 현상 : Phantom Read
      • mysql 8.0이상부터는 InnoDB로 변경되어 MVCC로 인해 팬텀 리드 안 나타남.
  • Serializable
    • 한 트랜잭션에서 사용하는 데이터는 다른 트랜잭션이 접근 불가능
    • 공유락을 테이블 자체에 건다.

공유락(Shared Lock) : 사용 중인 데이터를 다른 트랜잭션이 읽기 허용, 쓰기 비허용

낮은 단계 Isolation Level을 활용할 때 발생하는 현상

Dirty Read

  • 다른 트랜잭션에서 커밋되지 않은 내용에 접근 가능

Non-Repeatable Read

  • 한 트랜잭션 내에서 검색 결과가 비일관적인 현상 발생

Phantom read

  • 일정범위의 레코드를 두 번 이상 읽을 때, 첫 번째 쿼리에서 없던 유령 레코드가 두 번째 쿼리에서 나타나거나 사라지는 현상

참고

https://code-lab1.tistory.com/51

https://gyoogle.dev/blog/computer-science/data-base/Transaction Isolation Level.html

profile
시도하고 More Do하는 백엔드 개발자입니다.

0개의 댓글