본문 바로가기
공부이야기/CS공부

[DB] Isolation Level (트랜잭션 격리 수준)

by coderoom 2021. 5. 13.

 

트랜잭션 격리 수준 (Isolation Level)

동시에 여러 트랜잭션이 처리 될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것.

 

  • Read Uncommitted
  • Read Committed
  • Repeatable Read
  • Serializable

 

 

READ UNCOMMITTED

어떤 트랜잭션의 변경 내용이 COMMIT이나 ROLLBAK과 상관없이 다른 트랜잭션에서 보여진다.

 

Dirty Read 발생 가능

  1. A 트랜잭션에서 10번 사원의 나이를 27살에서 28살로 변경
  2. 커밋하지 않음
  3. B 트랜잭션에서 10번 사원의 나이를 조회
  4. 28살이 조회됨 (Dirty Read)
  5. A 트랜잭션에서 문제가 발생해 ROLLBACK 함
  6. B 트랜잭션은 10번 사원이 여전히 28살이라고 생각하고 로직을 수행

 

 

READ COMMITTED

어떤 트랜잭션의 변경 내용이 COMMIT 되어야만 다른 트랜잭션에서 조회할 수 있다.

Oracle DBMS에서 기본으로 사용하소 있고, 온라인 서비스에서 가장 많이 선택되는 격리 수준이다.

 

NON-REPEATABLE READ 발생 가능

  1. B 트랜잭션에서 10번 사원의 나이를 조회
  2. 27살이 조회됨
  3. A 트랜잭션에서 10번 사원의 나이를 27살에서 28로 바꾸고 COMMIT
  4. B 트랜잭션에서 10번 사원의 나이를 다시 조회
  5. 28살이 조회됨

 

REPEATABLE READ 정합성이란?
하나의 트랜잭션 내에서 똑같은 SELECT를 수행했을 경우 항상 같은 결과를 반환해야 한다.

 

 

 

REPEATABLE READ

트랜잭션이 시작되기 전에 커밋된 내용에 대해서만 조회할 수 있다.

MySQL DBMS에서 기본으로 사용하고 있고, 이 격리 수준에서는 NON-REPEATABLE READ 부정합이 발생하지 않는다.

(자신의 트랜잭션 번호보다 낮은 트랜잭션 번호에서 변경된 것만 보게 되는 것이다.)

한 트랜잭션의 실행 시간이 길어질수록 해당 시간만큼 계속 멀티 버전을 관리해야 하는 특성이 있다.

 

 

UPDATE 부정합 발생 가능

Phantom READ 발생 가능

 

 

 

SERIALIZABLE

읽기 작업에도 공유 잠금을 설정하게 되고, 동시에 다른 트랜잭션에서 이 레코드를 변경하지 못하게 된다.

이러한 특성 때문에 동시처리 능력이 다른 격리수준보다 떨어지고, 성능 저하가 발생하게 된다.

 

 

 

 

 

 

 

참고 링크

 

 

 

 

 


 

 

 

댓글