본문 바로가기

프로그래밍 회고록/Database

DATABASE에서 Isolation Level 이란?

728x90
반응형

개념


특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것.

 

종류


  1. READ_UNCOMMITED ( level0 )
    1. 각 트랜잭션에서의 변경 내용이 COMMIT 이나 ROLLBACK 여부에 상관 없이 다른 트랜잭션에서 값을 읽을 수 있다.
    2. DIRTY READ 현상 발생 - 트랜잭션 작업이 끝나지 않았는데 다른 트랜잭션에서 값을 읽게 되니 발생하는 현상
  2. READ_COMMITED ( level1 )
    1. SELECT 문장이 수행되는 동안 해당 데이터에 Shared Lock이 걸리는 단계
    2. RDB 에서 대부분 기본적으로 사용되고 있는 격리 수준 ( ORACLE, H2 )
    3. REPEATABLE READ 정합성에 어긋남
      1. 하나의 트랜잭션 내에서 똑같은 SELECT를 했는데 값이 변화되었을떄 정합성이 깨진다.
  3. REPEATABLE_READ ( level2 )
    1. SELECT 문장이 수행되는 동안 모든 데이터에 Shared Lock이 걸리는 단계
  4. SERIALIZABLE( level3 )
    1. 트랜잭션이 완료될 때까지 SELECT 문장이 사용되는 모든 데이터에 Shared Lock이 걸리는 단계

Isolation Level 조절에 고려할 변수


Isolation Level의 조정은 동시성과 데이터 무결성에 연관되어 있다.

 

Isolation Level을 상향조정 하면 동시성이 하락하고 무결성이 상승하고

Isolation Level을 하향조정 하면 무결성이 하락하고 동시성이 상승하는 반비례관계에 있다.

Isolation 단계별 현상


Dirty Read

READ_COMMITED 계층 이상에서 해결
어떤 트랜잭션에서 아직 실행이  끝나지 않은 다른 트랜잭션에 의한 변경사항을 보게되는 경우

Non-Repeatable Read

REPEATABLE_READ 계층 이상에서 해결
"한 트랜잭션에서 같은 쿼리를 두 번 수행할 때 그 사이에 다른 트랜잭션 값을 수정 또는 삭제하면서
두 쿼리의 결과가 상이하게 나타나는 일관성이 깨진 현상

Phaontom Read

SERIALIZABLE 계층 이상에서 해결
한 트랜잭션 안에서 일정 범위의 레코드를 두 번 이상 읽었을 때, 
첫번째 쿼리에서 없던 레코드가 두번째 쿼리에서 나타나는 현상

728x90