CS/데이터베이스

트랜잭션 고립 수준

coffee. 2024. 1. 28. 18:01

트랜잭션의 고립수준 이란?

-트랜잭션들 끼리 일관성 있는 데이터를 얼마나 허용할 것인지 정해놓은 수준

-고립수준이 높을수록 일관성은 보장되지만 그만큼 동시성이 떨어져 성능 하락

 

이상현상 종류

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 문제가 발생 안함

 

 

참조:https://code-lab1.tistory.com/52