DB

[DB] 트랜잭션의 ACID 특성과 격리 레벨(isolation level)

imcoding 2022. 8. 7. 20:52

 

트랜잭션

 


Atomic (원자성)

모든 작업이 실행되거나 모두 실행되지 않아야 한다.
ex) 송금 과정에서 중간에 오류가 날 수 있으므로 A계좌의 잔액이 줄어드는 것과 B계좌의 잔액이 늘어나는 것은 모두 실행되거나 모두 실패해야 한다.

 

Consistency (일관성)

모든 트랜잭션이 종료되고 데이터를 저장하는 시점에 DB의 제약조건을 모두 지키고 있는 상태여야 한다. 위반하는 트랜잭션은 중단된다.

 

Isolation (고립성)

각 트랜잭션은 다른 트랜잭션과 독립적으로 동작해야한다.
격리성 레벨은 READ_UNCOMMITTED > READ_COMMITTED > REPEATABLE_READ > SERIALIZABLE 순서로 성능은 떨어지고 고립성은 증가한다.

 

READ_UNCOMMITTED : 처리중인 트랜잭션의 데이터를 읽을 수 있는 경우
- 변경중에 있으며 아직 완료처리하지 않은 데이터를 읽는 Dirty Read 가 발생할 수 있다.

READ_COMMITTED : 어떤 트랜잭션의 변경 내용이 commit 되어야만 다른 트랜잭션에서 조회할수 있다.

REPEATABLE_READ  : 어떤 트랜잭션이 시작되자마자 데이터를 스냅샷으로 기억해둔다. 따라서 이 트랜잭션이 처리되는 중에는 데이터가 변경되더라도 스냅샷을 찍어둔 내용으로 조회된다.
MySQL에서 기본적으로 사용한다.

SERIALIZABLE : 극단적으로 격리시켜 한번에 하나의 트랜잭션만 실행할 수 있다.
동시처리 능력이 떨어지며 성능이 좋지 않다.

Durability (지속성)

트랜잭션을 commit하게 되면 지속(저장)이 반드시 된다.