DB
트랜잭션(Transaction)
탁재민
2024. 2. 24. 19:50
트랜잭션(Transaction)
데이터베이스의 상태를 변화(SELECT, UPDATE, INSERT, DELETE)시키기 위해 수행하는 작업 단위
ACID 속성
- 원자성(Atomicity): 트랜잭션 내의 모든 연산은 전부 성공하거나 전부 실패
- 일관성(Consistency): 트랜잭션이 성공하면, 데이터베이스의 규칙과 제약을 만족하는 일관된 상태로 변화
- 격리성(Isolation): 동시에 실행되는 트랜잭션들이 서로의 연산에 영향을 주지 않음
- 지속성(Durability): 트랜잭션이 성공하면, 그 결과는 시스템에 영구적으로 반응
연산
- Commit: 트랜잭션 동안 수행된 모든 연산이 성공적으로 완료되었고 일관성을 유지했다고 알리는 연산
- Rollback: 트랜잭션 내에서 수행된 모든 연산을 취소하고, 데이터베이스를 트랜잭션 시작 이전의 상태로 되돌림
상태
- Active: 트랜잭션이 실행 중인 상태
- Failed: 트랜잭션이 오류가 발생해서 중단된 상태
- Aborted: 트랜잭션이 실패하여 Rollback 이 수행된 상태
- Partially Committed: 트랜잭션이 성공하고 Commit이 되기 직전 상태
- Committed: 트랜잭션이 성공적하고 Commit 연산을 실행한 후의 상태
읽기 현상
- Dirty read: 한 트랜잭션에서 변경한 데이터를 다른 트랜잭션이 읽었는데 롤백되는 경우
- Non-repeatable Reads: 트랜잭션 내에서 동일한 쿼리를 두 번 실행했을 때 다른 결과를 얻음
- Phantom Reads: 한 트랜잭션 내에서 같은 쿼리를 실행했을 때, 처음 쿼리를 실행한 후 다른 트랜잭션이 새로운 데이터를 삽입하면, 두 번째 쿼리 결과에는 이전에 없던 새로운 데이터가 포함
격리 수준(isolation level)
- READ UNCOMMITTED: 아직 Commit이 이루어지지 않은 변경 내용을 다른 트랜잭션이 읽는 것을 허용
- READ COMMITTED: Commit이 이루어진 변경 내용만 조회 가능
- REPEATABLE READ: 트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회 가능
- SERIALIZABLE: 트랜잭션을 순차적으로 진행
|
Dirty Read |
Non-Repeatable Read |
Phantom Read |
READ UNCOMMITED |
O |
O |
O |
READ COMMITTED |
X |
O |
O |
REPEATABLE READ |
X |
X |
O |
SERIALIZABLE |
X |
X |
X |