[DB] 트랜잭션이란?

반디·2023년 5월 5일
0

데이터베이스

목록 보기
2/2
post-thumbnail

트랜잭션이란?

데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위로, 데이터베이스의 논리적 연산 단위입니다.
데이터의 일관성을 유지하면서 안정적으로 데이터를 복구하기 위한 기능입니다.

특성

  • 원자성: 정의된 연산들은 모두 성공적으로 실행 or 전혀 실행되지 않은 상태로 남아있어야 함

  • 일관성: 트랜잭션이 실행되기 전의 데이터베이스 내용에 오류가 없다면 트랜잭션 실행 이후에도 오류가 있어서는 안됨

  • 독립성: 복수의 트랜잭션이 동시에 실행되고 있는 경우에도 각 트랜잭션은 독립적으로 실행되어야 함

  • 지속성: 트랜잭션이 성공적으로 수행되면 그 트랜잭션이 갱신한 DB의 내용은 영구적으로 저장

트랜잭션 제어어(TLC)

CommitRollback
현재 상태를 데이터베이스의 최종 반영작업이 실패. 이전 상태로 돌아감.
하나의 트랜잭션이 성공적으로 완료 + 데이터베이스의 일관성이 유지되는 상태임을 알림COMMIT 되지 않은 상위의 모든 트랜잭션을 rollback

트랜잭션 격리 수준(Transaction Isolation Level)

트랜잭션에서 일관성 없는 데이터에 대한 허용 수준입니다. 데이터베이스에서는 독립성을 위해 복수의 트랜잭션이 데이터베이스에 접근하는 것을 제한(locking)해야 합니다. 그러나, 특정 시점에 오직 하나의 트랜잭션만 데이터베이스에 접근할 수 있도록 한다면 데이터베이스의 성능은 떨어지게 됩니다. (모든 트랜잭션을 순차적으로 처리하게 되므로)
따라서 효율적인 locking 방법이 필요합니다.

Read Uncommitted (level 0)Read Committed (level 1)Repeatable Read (level 2)Serializable (level 3)
한 트랜잭션이 처리 중이거나 아직 commit되지 않은 데이터를 다른 트랜잭션이 접근 가능트랜잭션이 현재 처리 중인 데이터에는 접근 불가트랜잭션이 완료될 때까지 해당 데이터에는 접근 불가트랜잭션들을 항상 순차적으로 처리

트랜잭션 격리 수준이 낮은 경우의 문제점

  • Dirty Read: 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것

한 트랜잭션 내에서 같은 쿼리를 두 번 수행하는 상황을 가정해봅니다.

  • Non-Repeatable Read: 수행 도중에 다른 트랜잭션이 값을 수정 또는 삭제하는 바람에 동일한 두 쿼리의 결과가 다르게 나타나는 경우

  • Phantom Read: 첫번째 쿼리를 실행했을 때에는 없던 유령 레코드가 두번째로 쿼리를 실행했을 때 나타나는 현상

참고문헌
https://www.geeksforgeeks.org/transaction-isolation-levels-dbms/

profile
꾸준히!

0개의 댓글