트랜잭션 고립 수준
트랜잭션의 고립수준 이란?
-트랜잭션들 끼리 일관성 있는 데이터를 얼마나 허용할 것인지 정해놓은 수준
-고립수준이 높을수록 일관성은 보장되지만 그만큼 동시성이 떨어져 성능 하락
이상현상 종류
1.Dirty Read
-어떤 트랜잭션에서 아직 실행이 끝나지 않은 트랜잭션에 의한 변경사항을 보게 되는 경우
2.Non Repeatable Read
-어떤 트랜잭션이 같은 쿼리를 2번 실행하는데 그 사이에 다른 트랜잭션이 수정/삭제를 하여 같은 쿼리에 다른 값이 나오는 경우
3.Phantom Read
-어떤 트랜잭션이 같은 쿼리를 2번 실행하는데 그 사이에 없던 레코드가 추가되어 같은 쿼리에 다른 값이 나오는 경우
Read Uncommitted(Level 0)
-각 트랜잭션에서 변경된 내용이 commit 이나 rollback 여부에 상관없이 다른 트랜잭션에서 읽을 수 있다.
-정합성에 문제가 많은 격리 수준으로 사용하지 않는 것이 좋다.
정합성:어떤 데이터들이 서로 일치함
무결성:어떤 데이터들의 값이 정확한 상태
-Dirty Read,Non Repeatable Read,Phantom Read 발생 가능
Read Committed (Level 1)
-트랜잭션 수행이 완료되고 COMMIT된 데이터만 다른 트랜잭션에서 READ하도록 허용하는 수준
-Dirty Read 문제 발생 안함
-Non Repeatable Read,Phantom Read 발생
Repeatable Read (Level 2)
-이론상으론 특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삭제가 불가능 하다.
-INSERT는 가능
-실제로 동작하는 방식은 자신의 트랜잭션 번호(id)보다 낮은 트랜잭션 번호에서 변경된(COMMIT)것만 읽게되고
자신의 트랜잭션보다 높은 트랜잭션에서 변경된 것은 UNDO영역에 백업된 데이터를 읽는다.
-UNDO영역에 백업된 레코드가 많아지면 성능이 떨어질 수 있다.
-Non Repeatable Read 발생 x
-Phantom Read 발생
SERIALIZABLE (Level 3)
-가장 단순하고 엄격한 격리 수준
-모든 동작이 직렬화하게 작동한다.
-특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삭제/삽입이 불가능
-동시성 하락,성능 하락
-dirty read,Non Repeatable Read,Phantom Read 문제가 발생 안함