알아두면 좋은것

DB Transaction 트랜잭션

큼큼이 2019. 5. 22. 21:47

트랜잭션 격리

 

격리성 관련 문제점 

 

- Dirty Read

한 트랜잭션(T1)이 데이터에 접근하여 값을 'A' -> 'B' 로 변경했고 아직 저장하지(Commit X) 않았을 때, 다른 트랜잭션(T2)이 해당 데이터를 Read 하는 문제

T2가 읽은 데이터는 'B'가 될 것임. 하지만 T1이 최종 Commit 을 하지 않고 종료된다면 T2가 가진 데이터가 꼬일 것임

 

- Non Repeatable Read

한 트랜잭션(T1)이 데이터를 Read 하고 있다. 이때 다른 트랜잭션(T2)가 데이터에 접근하여 값을 변경 또는 데이터를 삭제한 후, 커밋을 한다면

T1이 다시 해당 데이터를 read 하고자 하면 변경된 데이터 혹은 사라진 데이터를 찾게 된다.

 

- Phanthom Read

-  트랜잭션(T1) 중에 특정 조건으로 데이터를 검색하여 결과를 얻었다. 이때 다른 트랜잭션(T2)가 접근해 해당 조건의 데이터 일부를 삭제 또는 추가 했을 때,

아직 끝나지 않은 트랜잭션(T1)이 다시 한번 해당 조건으로 데이터를 조회하면 T2에서 추가/삭제된 데이터가 함께 조회/누락 된다.

그리고 트랜잭션(T2)가 Rollback을 하면 데이터가 꼬인다

 

 

트렌젝션 격리 수준

- Read Uncommitted

한 트랜잭션에서 커밋하지 않은 데이터에 다른 트랜잭션이 접근 가능하다. -> Dirty Read, Non Repeatable Read, Phanthom Read 문제 발생

 

- Read Committed (기본 설정)

커밋이 완료된 데이터만 읽을 수 있다. ->  Non Repeatable Read, Phanthom Read 문제 발생

 

- Repeatable Read

한번 조회한 데이터를 반복해서 조회 해도 같은 데이터가 조회된다.->  Phanthom Read 문제 발생

 

- Serializable

가장 엄격한 격리 수준으로 3가지 문제를 모두 커버 가능. 동시 처리 성능이 떨어짐

공유잠금이 걸린 테이블에 대한 데이터 변경, 추가 작업이 되지 않음

 

- Snapshop

- Serializable 과 동일한 격리 수준을 보여주지만 잠금이 걸린 테이블에 대한 데이터 변경, 추가 작업이 가능한 격리 수준으로

잠금이 풀린 즉시 원 테이블에 작업이 이루어지는 것.