철학과 학생의 개발자 도전기
트랜잭션 본문
1. 트랜잭션
- 데이터를 처리하는 하나의 논리적 작업 단위
- 트랜잭션 내의 모든 연산은 한꺼번에 수행되거나 모두 수행되지 않아야 한다.
- 트랜잭션이 성공적으로 완료된 후에는 결과가 영구적으로 반영되어야 한다.
2. ACID 특징
- 원자성(Atomicity): 트랜잭션 전체가 반영되거나 반영되지 않아야 한다.
- 일관성(Consistency): 의도하지 않은 데이터 손상으로 무결성을 해치지 않아야 한다.
- 고립성(Isolation): 트랜잭션은 서로의 연산을 방해하지 않아야 한다.
- 지속성(Durability): 트랜잭션 수행 결과가 시스템에 적용되는 것을 보장해야 한다.
3. Commit과 Rollback
- Commit: 하나의 트랜잭션이 끝났음을 알려주는 연산. 트랜잭션 결과가 시스템에 반영된다.
- Rollback: 트랜잭션이 비정상적으로 종료됐을 경우, 트랜잭션이 실행되기 전 상태로 되돌리는 연산.
4. 트랜잭션 격리수준
- 여러 트랜잭션이 동시에 데이터베이스에 접근할 때, 어느 정도까지 서로의 영향을 받을지를 결정하는 것
- SQL 표준 - Read Uncommitted, Read Committed, Repeatable Read, Serializable
Read Uncommitted
다른 트랜잭션의 변경 내용이 커밋되지 않아도 읽을 수 있다. -> “Dirty Read”
Read Commited
커밋된 내용만 읽을 수 있지만, 한 트랜잭션 내에서 같은 데이터를 두 번 조회했을 때 다른 결과가 나오는 현상이 발생할 수 있다.
-> "Non-Repeatable Read"
Repeatable Read
Non-Repeatable Read 문제를 해결한다. 자신보다 낮은 번호의 트랜잭션 결과만 사용한다.
새로운 레코드 삽입 시 이전과 다른 데이터 집합이 조회되는 현상이 발생할 수 있다. -> "Phantom Read"
Serializable
특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삭제/삽입이 불가능하다.
-> Dirty Read, Non Repeatable Read, Phantom Read 모두 해결
성능이 떨어져서 잘 사용되지 않는다.
'데이터베이스' 카테고리의 다른 글
옵티마이저 (0) | 2023.11.05 |
---|---|
Lock과 MVCC (0) | 2023.11.05 |
인덱스 (0) | 2023.10.28 |
이상과 정규화 (0) | 2023.10.27 |
DBMS와 RDB의 키 (0) | 2023.10.19 |