[ Database ] 트랜잭션의 고립 수준과 이상 현상

5tr1ker·2023년 5월 31일
0

Database

목록 보기
4/5
post-thumbnail

트랜잭션 고립 수준이란 여러 트랜잭션간의 격리 수준을 결정하는 개념입니다. 고립 수준은 데이터 일관성 , 동시성 ( 병행성 ) 제어를 위해 사용됩니다.

고립 수준이 높아질수록 일관성은 높아지나 동시성은 낮아집니다. ( 성능 하락 )

트랜잭션의 이상 현상

먼저 트랜잭션의 이상 현상은 3가지로 Dirty Read ( 더티 리드 ) , Non-repeatable Read ( 반복하지 않은 읽기 ) , Phantom Read ( 유령 읽기 ) 가 있습니다.

트랜잭션 이상 현상은 데이터베이스의 고립 수준을 선택함으로써 제어할 수 있습니다. 위에서 설명했듯이 높은 제어 레벨을 선택함으로써 이상 현상을 줄일 수 있지만, 그만큼 동시성이 감소할 수 있습니다.

Dirty Read ( 더티 리드 )

한 트랜잭션이 커밋되지전에 다른 트랜잭션이 변경중인 데이터를 읽을 수 있는것을 말합니다.

이 경우에 트랜잭션이 Rollback 되거나 , 다른 값으로 변경될 수 있으므로 데이터의 일관성이 깨질 수 있습니다.

Non-repeatable Read ( 반복하지 않은 읽기 )

한 트랜잭션이 동일한 쿼리를 여러 번 실행할 때, 다른 트랜잭션이 해당 데이터를 수정 / 삭제하여 다른 결과가 얻어지는 현상을 말합니다.

Phantom Read ( 유령 읽기 )

한 트랜잭션이 동일한 쿼리나 범위 검색을 할 때, 다른 트랜잭션이 새로운 데이터를 삽입하여 처음과 다른 결과를 얻는 현상을 말합니다. ( 이전에 없던 데이터가 새로 생기는 현상을 말합니다. )

트랜잭션 고립 수준

Read Uncommited ( Level 0 ) - 커밋되지 않은 읽기

이 수준은 커밋되지 않은 데이터를 다른 트랜잭션이 읽을 수 있습니다. 이로인해 Dirty Read , Non-repeatable Read , Phantom Read 가 발생할 수 있습니다.

Read Commited ( Level 1 ) - 커밋된 읽기

이 수준은 DBMS에서 Default로 설정하는 레벨로 한 트랜잭션이 해당 데이터를 커밋한 후에만 다른 트랜잭션이 해당 데이터를 읽을 수 있습니다. 이로인해 Non-repeatable Read , Phantom Read 가 발생할 수 있습니다.

Repeatable Read ( Level 2 ) - 반복 가능한 읽기

이 수준은 트랜잭션이 데이터를 조회할 때 다른 트랜잭션이 해당 데이터를 수정할 수 없지만 , 추가를 할 수 있습니다. 이로인해 Phantom Read 가 발생할 수 있습니다.

Serializable ( Level 3 ) - 직렬화

이 수준은 각 트랜잭션들을 순차적으로 실행하는 것처럼 처리되며 최고 수준의 격리를 제공합니다. 모든 이상현상을 해결할 수 있지만 동시성이 떨어져 성능이 하락합니다.

참고

참고 블로그 1 : https://mangkyu.tistory.com/30
참고 블로그 2 : https://skytitan.tistory.com/265

profile
https://github.com/5tr1ker

0개의 댓글