[DB] 트랜잭션과 격리 수준

이창윤·2022년 8월 19일
0
post-thumbnail
post-custom-banner

트랙잭션(Transaction)이란?

데이터베이스의 상태를 변화시키기 위해 수행하는 작업의 단위

쿼리(Query)문들을 하나로 묶어 처리한다 -> 모든 쿼리 작업을 성공적으로 완료해야 종료되고 작업이 하나라도 실패하면 트랜잭션이 실패한 것으로 판단한다.

  • 트랙잭션을 효율적으로 설계하는 것이 데이터를 다룰 때 많은 이점을 가져다준다.

  • 데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위해 사용한다.

ACID

트랜잭션의 안전성을 보장하기 위해 필요한 특성 4가지

◻ Atomicity (원자성)

트랜잭션이 데이터베이스에 모두 반영되거나 전혀 반영되지 않아야 한다. (All or Nothing)

◻ Consistency (일관성)

트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다. (데이터 타입이 동일해야 함)

◻ Isolation (독립성)

둘 이상의 트랜잭션이 동시에 실행되고 있을 때 어떤 트랜잭션이라도 다른 트랜잭션의 연산에 끼어들 수 없다.

◻ Durability (지속성)

트랜잭션이 성공적으로 완료되면 데이터베이스에 결과가 영구적으로 반영되어야 한다. (트랜잭션에 대한 로그가 남아야 한다)


Commit & Rollback

◻ Commit

  • 하나의 트랜잭션이 성공적으로 끝나서 데이터베이스가 일관성있는 상태에 있을 때 모든 작업들을 정상적으로 처리하겠다고 확정하는 명령어
  • Commit을 수행하면 결과가 데이터베이스에 영구 저장되고 트랜잭션이 종료된다.

◻ Rollback

  • 하나의 트랜잭션이 문제가 발생해 트랜잭션의 원자성이 깨진 경우 처리과정에서 발생한 변경사항을 취소하는 명령어
  • 마지막 Commit을 완료한 시점(시작되기 이전)으로 돌아가거나 미리 지정한 Savepoint로 돌아가서 상태를 복구하고 트랜잭션을 처음부터 다시 시작할 수 있다.

격리 수준(Isolation level)

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

  • 레벨이 낮을수록 동시성은 높아지고 일관성은 떨어진다.
  • 레벨이 높을수록 동시성은 떨어지고 일관성은 높아진다.
  • 레벨이 높아질수록 비용이 높아진다.

Level 0: Read Uncommitted

트랜잭션에서 처리중인(커밋 이전의) 데이터를 다른 트랜잭션에서 읽는 것을 허용한다.

  • Dirty Read, Non-Repeatable Read, Phantom Read 현상이 발생한다.

Level 1: Read Committed

Dirty Read를 방지하기 위해 트랜잭션이 커밋되어 확정된 데이터만 읽는 것을 허용한다.

  • Non-Repeatable Read, Phantom Read 현상이 여전히 발생한다.
  • 대부분의 DBMS가 기본으로 채택하고 있는 수준이다.

Level 2: Repeatable Read

선행 트랜잭션이 읽은 데이터는 트랜잭션이 종료될 때까지 후행 트랜잭션이 갱신 혹은 삭제하는 것을 허용하지 않는다.

  • UPDATE, DELETE 불가능, INSERT는 가능
  • 같은 데이터에 대한 쿼리문을 두번 수행했을 때 일관성있는 결과를 반환한다.

Level 3: Serializable Read

선행 트랜잭션이 읽은 데이터를 후행 트랜잭션이 갱신하거나 삭제하지 못할 뿐만 아니라 삽입도 허용하지 않는다.

  • 읽기만 할 수 있다.

낮은 격리 수준 사용시 발생하는 현상

◻ Dirty Read

트랜잭션에서 처리중인(커밋 이전의) 데이터를 다른 트랜잭션에서 읽을 수 있도록 허용할 때 발생

◻ Non-Repeatable Read

한 트랜잭션 내에서 같은 쿼리를 두번 수행할 때 그 사이에 다른 트랜잭션이 값을 수정 또는 삭제함으로써 두 쿼리의 결과가 다르게 나오는 현상

◻ Phantom Read

한 트랜잭션 안에서 레코드를 두 번 이상 읽을 때 첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상

격리 수준 Dirty Read Non Repeatable Read Phantom Read
0. Read Uncommitted O O O
1. Read Committed X O O
2. Repeatable Read X X O
3. Serializable X X X

참고 및 출처

트랜잭션이란?
DB 트랜잭션(Transaction)
ACID사진

post-custom-banner

0개의 댓글