blog - 7

Lumi·2021년 8월 18일
0

project

목록 보기
10/16
post-thumbnail

DB격리수준

트랜잭션 : 일이 처리되기 위한 가장 작은 단위.

예를들어서 설명을 해보면

유튜브 한개를 올린다고 하면
1 - 영상 준비
2 - 영상 찍기
3 - 영상 업로드로 단계가 나뉘어 질수가 있다.

이떄 1,2,3 모두 하나의 트랜젝션이라고 할수가 있으면

이 세가지를 모두 합친 트렌젝션또한 하나의 트렌잭션이라고 할수가 있다.

이런 여러개를 합친 트랜젝션을 서비스라고 부르는 것이다.

오라클 이라는 DB는 readcommit을 사용한다.

  • readcommit : 쉽게 말하면 commit한 DB만을 읽는다.
    -> 중간에 값이 바뀌어도 commit하지않으면 값이 바뀌지 않는다.
    == 더티체킹을 허용하지 않는다.
    -> 오라클은 undo라는 영역이 있는데 이곳에 값이 바뀌기 전의 값이 저장이 된다.
    == 그러기 떄문에 값을 불러오게 되면 DB에 있는 값이 아니라 undo에 있는 값을 들고오며
    commit하게 되면 undo에 있는 값이 바뀌게 된다.

  • readcommit의 문제점 : 데이터의 정합성이 꺠질수가 있다.
    -> 만약 DB의 값을 가져오는 쪽에서 중간에 값이 commit되어서 처음 에 예상했던 결과와 다른 값이 도출될수도 있다.


그림으로 설명하자면

S의 DB값이 10000이라서 S를 총 3번 더하면 3만이 될꺼라고 예상을 하지만 중간에 값이 commit 되어서 S의값이 바뀌게 되면 예상값도 달라지게 된다.

이러한 문제로 가끔씩 결과값이 없는 경우가 발생을 하는데 이것을 팬텀리드 라고 한다 이것을 해결하기 위해 repeatable read를 사용해야 한다.

결과값이 달라지는것은 부정합 발생 이라고 한다.

profile
[기술 블로그가 아닌 하루하루 기록용 블로그]

0개의 댓글