정의
더 이상 분해가 불가능한 업무의 최소단위.
트랜잭션을 통해 무결성과 동시성 제어, 회복 이렇게 3가지 효과를 얻을 수 있습니다.
Transaction의 4가지 특징 (aka. ACID)
Atomic(원자성)
전부 처리되거나 아예 하나도 처리되지 않는 전략(All or Noting)
- 계좌 이체계좌 이체 도중 시스템이 다운된 상황.
미림씨 계좌에서 돈이 빠져나간 것을 rollback
- 급여 인상
Consistency(일관성)
트랜잭션 수행 전과 후의 일관된 상태를 유지한다.
Isolation(고립성)
한 트랜잭션이 데이터를 갱신하는 동안 이 트랜잭션이 완료 되기 전에는 갱신 중인 데이터를 다른 트랜잭션들이 접근하지 못하도록 해야 한다.
Durability(영속성)
트랜잭션이 일단 그 실행을 성공적으로 완료하면 그 결과는 데이터베이스에 영속적으로 저장된다.
동시성 제어를 하지 않았을 때 생기는 문제
Lost Update
수행 중인 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어 씀으로써 갱신이 무효가 되는 것을 뜻함.
Dirty Read
완료되지 않은 트랜잭션이 갱신한 데이터를 읽는 것
Non-Repeatable Read
한 트랜잭션이 동일한 데이터를 두 번 읽을 때 서로 다른 값을 읽는 것
Phantom Problem
한 트랜잭션 내에서 같은 쿼리를 두 번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두 번째 쿼리에서 나타나는 현상
[시간1과 시간3의 select 문의 결과가 달라진다. (기존에는 없던 row가 생김)]
Transaction Isolation Level
고립 수준은 한 트랜잭션이 다른 트랜잭션과 고립되어야 하는 정도를 나타낸다.
고립 수준이 낮으면 동시성은 높아지지만 데이터의 정확성을 떨어진다.
고립 수준이 높으면 데이터가 정확해지지만 동시성이 저하된다.
Read Uncommitted
트랜잭션 내의 질의들이 공유 로크를 걸지 않고 데이터를 읽는다.
갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유한다.
Read Committed(oracle default)
트랜잭션 내의 질의들이 읽으려는 데이터에 대해 공유 로크를 걸고, 읽기가 끝나자마자 로크를 해제한다.
갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유한다.
Repeatable Read(mysql default)
트랜잭션 내의 질의들이 읽으려는 데이터에 대해 공유 로크를 걸고, 트랜잭션이 끝날 때까지 보유한다.
갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유한다.
Serializable Read
질의에서 검색되는 튜플들뿐만 아니라 인덱스에 대해서도 공유 로크를 걸고 트랜잭션이 끝날 때까지 보유한다.
갱신하려는 데이터에 대해서는 독점 로크를 걸고, 트랜잭션이 끝날 때까지 보유한다.
Reference
https://sabarada.tistory.com/117
[데이터베이스] 트랜잭션과 격리성
안녕하세요. 평소에 포스팅하던 내용과는 조금 떨어진 이론적인 내용을 포스팅하고자 합니다. DB는 트랜잭션 단위로 처리된다고 합니다. 유명한 All Or Nothing이 DB의 트랜잭션에서 나온 이야기입
sabarada.tistory.com
https://jaehoney.tistory.com/162
Database - 교착상태 문제를 해결하는 방법!
DB(데이터베이스)에서의 교착상태 운영체제에서 교착상태(Dead Lock)는 각각의 프로세스가 서로의 자원을 점유하기 위해 대기하면서 문제가 발생한다 DB(데이터베이스)에서 교착상태는 여러 개의
jaehoney.tistory.com
'Computer Science > Database' 카테고리의 다른 글
클러스트링과 Replication (0) | 2024.04.23 |
---|---|
파티셔닝과 샤딩 (0) | 2024.04.23 |
DB Index (0) | 2024.04.23 |
Join & Driving Table (0) | 2024.04.23 |
PK와 Unique Key의 차이 (0) | 2024.04.16 |