Isolation level 이해하기

Isolation level이란 트랜잭션에서 일관성이 없는 데이터를 허용하는 수준을 이야기합니다.

레벨이 높아질수록 처리에 대한 비용이 증가가 하게 됩니다.

기본적으로 4가지의 레벨이 존재합니다. 
- Read Uncommitted
- Read Committed
- Repeatable Read
- Serializable

  • Read Uncommitted
    Transaction 이 끝나지 않은 상황에서 각기 다른 Transaction이 변경한 내용에 대한 조회가 가능합니다. 데이터베이서의 일관성을 유지할 수 없습니다.

Transaction1이 수행중에 Transaction2가 값을 변경할 경우 Transaction1이 다시 조회를 하는 시점에 이미 Transaction2가 값을 변경하였기 때문에 아무개에서 개발자로 값이 변경되어 조회가 됩니다.

  • Read Committed
    조회 시 데이터에 대한 Shared lock이 됩니다. Read Uncommitted와 다르게 Commit이 이루어진 데이터가 조회됩니다. 하지만 어떠한 사용자가 A라는 데이터를 B라는 데이터르 변경하는 동안 다른 Transaction은 접근할 수 없어 대기하게 됩니다.

참고 이미지입니다. 1) Transaction2가 Update를 하게됩니다. 2) 아직 커밋하지 않아 Transaction1은 Select를 하지 못하고 대기하게 됩니다. 3) Transaction2가 Commit명령어를 날리게됩니다. 4) 이제 Transaction2는 조회가 가능합니다.

  • Repeatable Read
    Transaction이 범위내에서는 조회한 데이터의 내용이 항상 동일함을 보장해줍니다.

1) Transaction1이 Select시점에 아무개가 조회됩니다. 2) Transaction2가 Update후 Commit을 시행하였지만 Update가 안됩니다. 그러나 Insert는 됩니다. 3) Transaction1이 다시 조회 해봐두 Transaction2가 Commit이 되지 않았기 때문에 아무개로 조회됩니다. 하지만 Insert한 동네개발자는 조회됩니다. 4) Transaction1이 종료되면 다시 Commit이 이루어지기 때문에 개발자로 조회가 됩니다.

  • Serializable
    말 그대로 직렬화를 이야기합니다. 그래서 모든 동작이 직렬화 되어 작동합니다. Repeatable Read와 다르게 Insert를 하여도 작동하지 않게 됩니다.

복잡한 내용을 간단한 예제로 설명해보았습니다. 만약 틀린점이 있으면 의견을 주세요 .

Show your support

Clapping shows how much you appreciated 동네개발자’s story.