[DB] Transaction 격리성

2023. 7. 10. 21:52DataBase

ACID 중 Isolation을 의미하는 격리성에 대해서 간단하게 정리해보려고 한다.

 

여기서 격리성의 의미는 실행중인 트랜잭션에 다른 트랜잭션이 접근할 수 없음을 의미한다.

 

그리고 이러한 격리성의 정도는 직접 정할 수 있다. 

 

격리성의 정도와 그에 따라 발생할 수 있는 문제점을 정리해보겠다 !

 

- Read UnCommitted

  : 트랜잭션인 커밋되기 전에 다른 트랜잭션인 읽기를 허용하는 것이다. 

  : 데이터의 정합성 문제를 일으킨다. (Dirty Read, Non-Reatable Read, Phantom Read)

 

- Read Committed

  : 커밋이 확정된 데이터만 읽도록 허용한다. 커밋되지 않은 데이터는 실제 DB가 아닌, Undo로그에 있는 이전 데이터를 가져온다. -> Dirty Read를 해결할 수 있다.

  : 하지만 Non-Reatable Read, Phantom Read는 여전히 발생할 수 있다.

 

- Repeatable Read

  : 한 번 읽은 데이터를 다시 읽어도 Undo에서 이전에 읽은 데이터를 그대로 보여준다.

  : Dirty Read와 Non-Reatable Read 둘 다 해결하지만, 실제 DB에 저장되어 있는 집합과는 다른 데이터를 읽게 될 수 있다. 즉 Phantom Read 발생 가능

 

- Serialized Read

  : 모든 격리성에서 오는 문제를 해결할 수 있지만 성능이 매우 떨어질 수 있다.

 

'DataBase' 카테고리의 다른 글

[DB] 낙관적 락 VS 비관적 락  (0) 2023.07.10