Transaction
트랜잭션¶
==트랜잭션==이란 데이터베이스의 상태를 변화하기 위해서 수행하는 작업의 단위
ACID¶
트랜잭션은 ACID 로 약칭되는 성질을 만족해야한다.
Atomicity (원자성)
- 트랜잭션은 모두 성공 (commit) 하거나 실패 (rollback) 해야한다.
Consistency (일관성)
- 트랜잭션이 commit 된 이후에 데이터베이스는 consistent 해야한다.
- 즉, 데이터베이스에 존재하는 제약사항 (constraint) 이 깨지면 안된다.
Isolation (독립성)
- 트랜잭션은 다른 트랜잭션에 독립적으로 자신만 실행되고 있는것 처럼 동작해야한다.
- 성능을 위해 종종 완화되며 표준에서는 4 가지 레벨 (Transaction Isolation Level) 을 통해 관리한다.
Durability (지속성)
- 트랜잭션이 커밋되었다면 어떠한 상황에도 어떠한 형태로든 저장되는 것을 보장해야한다.
- 즉, DB 서버의 파워가 꺼지거나 프로세스가 죽는 상황에서도 HDD, SSD 와 같은 이차메모리에 트랜잭션의 결과는 저장되어야 한다.
Isolation Level¶
- Isolation level 은 성능을 위해 트랜잭션의 독립성을 레벨을 나누어 관리하는 것이다.
- 표준에서는 4 가지 레벨을 가지며 이들은 독립성이 잘 지켜지지 않은경우 발생할 수 있는 이상현상 세가지를 어느 정도까지 허용할 것이냐를 기준으로 구분한다.
먼저 세가지 이상현상을 알아보자.
- Dirty Read
- 롤백된 데이터가 조회되는 현상이다.
- Non-Repeatable Read
- 같은데이터의 조회 결과가 바뀌는 현상이다.
- Phantom Ream
- 이상 데이터가 추가/삭제되어 조회되는 현상이다.
- 네가지 레벨을 알아보자.
다음은 네가지 Isolation Level 을 알아보자.
-
Serializable
- 이상현상을 전혀 허용하지 않는다.
- 트랜잭션을 serial 한 스케쥴로 실행하는 것을 의미한다.
-
Repeatable Read (MySQL Default)
- Phatom Ream 를 허용한다.
-
Read Committed (PostgreSQL Default)
- Phantom Read 와 Non-Reapeatable Read 를 허용한다.
-
Read Uncommitted - 세가지 이상현상을 모두 허용한다.
Last update:
February 26, 2023
Created: December 20, 2022
Created: December 20, 2022