트랜잭션(Transaction)이란?
-여러작업들을 하나로 묶은 단위
-한 덩어리의 작업들은 모두 실행되거나, 실행되지 않습니다. (all-or-nothing)
ACID란?
-데이터의 유효성을 보장하기 위한, 트랜젝션의 특징들의 앞글자를 딴 단어
- Atomicity(원자성)
중간 단계까지 실행되는 것이 아니라 처음부터 끝까지 완전하게 실행되며 중간에서 실패하는 일이 없도록 합니다.
모든 작업이 반영되거나 모두 롤백되는 특성입니다.
- Consistency(일관성)
트랜잭션이 완료되면 언제나 일관된 DB 상태를 유지하는 것을 의미합니다.
데이터는 미리 정의된 규칙에서만 수정이 가능하도록 합니다. 숫자 컬럼에 문자열값이 저장되는 것을 방지해줍니다.
- Isolation(고립성, 격리성)
다른 트랜잭션의 연산 작업이 끼어들지 못하도록 보장하는 것을 의미합니다.
다시말해 다른 트랜잭션의 연산이 중간 단계의 데이터를 볼 수 없음을 의미합니다.
- Durability(영구성, 지속성)
성공적인 트랜젝션은 영원히 반영(커밋, commit) 되어야 함을 의미합니다.
트랜잭션의 격리성(Transaction Isolation) 이란?
- 실행중인 트랜잭션의 중간결과를 다른 트랜잭션이 접근할 수 없다!
<격리성으로 인해 나타날 수 있는 문제점>
Dirty Read
- 다른 트랜잭션에 의해 수정되었지만 아직 커밋되지 않은 데이터를 읽는 것
Non-Repeatable Read
- 한 트랜잭션 내에서 같은 Key를 가진 행을 두번 읽었는데 그 사이에 값이 변경되거나 삭제되어 결과가 다르게 나타나는 현상
Phantom Read
- 한 트랜잭션 내에서 같은 쿼리를 두번 수행했는데, 첫 번째 쿼리에서 없던 유령(Phantom) 레코드가 두번쨰 쿼리에서 나타나는 현상
Phatom Read | VS | Non- Repeatable Read |
여러개를 요청하는 것에 대해서 데이터 값이 변경되는 것 | 1개의 행의 데이터 값이 변경되는 것 |
<격리성 수준(Transaction Isolation Level)>
병려 트랜잭션 시 특정 트랜잭션이 다른 트랜잭션에서 변경하는 데이터를 언제부터 볼 수 있는지 허용하는 수준을 의미한다.
격리 수준 | Dirty Read | Non-Repeatable Read | Phantom Read |
Read Uncommitted | O | O | O |
Read Committed | X | O | O |
Repeatable Read | X | X | O |
Serializable | X | X | X |
Read Uncommitted
- 모든 트랜잭션은 다른 트랜잭션의 커밋 여부와 상관없이 변경되는 데이터를 확인 가능하다.
- 데이터 정합성이 좋지 않은 격리 수준이므로 사용하지 않는다.
- Diry Read, Non-Repeatable Read, Phantom Read 현상이 발생한다.
Read Committed
- 각 트랜잭션은 다른 트랜잭션의 커밋 완료된 데이터만 확인 가능하다.
- 주로 사용되는 격리 수준이다.
- Non-Repeatable Read, Phantonm Read 현상이 발생한다.
Repeatable Read
- 한 트랜잭션이 시작되면 다른 트랜잭션에서 커밋 데이터가 있더라도 확인되지 않는다.
- 트랜잭션 별로 식별자를 주고 Undo 영역의 데이터를 백업해둠으로써 트랜잭션의 일관성을 보장한다.
- Phantom Read 현상이 발생한다.
Serializabl Read
- 가장 높은 수준의 격리수준이다.
- 한 트랜잭션에서 사용하는 데이터는 다른 트랜잭션에서 사용 불가능하다.
- 격리 수준에 따른 문제는 발생하지 않지만, 동시성이 저하되는 문제가 발생한다.
- 레코드 조회 : Shared Lock 획득시에만 조회 가능
- 레코드 수정 : Exclusive Lock 획득시에만 조회 가능
'Self Study > SQLD' 카테고리의 다른 글
[SQLD]데이터 모델링의 이해 (0) | 2022.11.02 |
---|---|
[SQLD] 데이터 무결성(Data Integrity) (0) | 2022.11.01 |
[SQLD] SQL문 중요 간단 정리! :) (0) | 2022.11.01 |
[SQLD] 연산자와 내장함수(Stored Function) (2) | 2022.11.01 |
[SQLD] DCL(데이터 제어어 : Data Control Language) 과 TCL(트랜젝션 제어어 : Transaction Control Language) (0) | 2022.11.01 |