ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Database 격리 수준에 관하여
    카테고리 없음 2023. 7. 31. 01:40

    데이터베이스를 학습하면서 다양한 격리수준과 관련하여 발표하는 시간이 있었는데 자료를 만들지 못해 이번을 기회로 작성하고자 한다.

    Read uncommited

    • 데이터 베이스에서 트랜잭션이 적용되지 않은 단계?라고 할수 있지 않을까?
    • 다른 트랜잭션의 commit되지 않은 데이터를 읽을 수 있다(dirty read)는 문제가 존재한다.

    간단한 예시를 살펴보자

    일단 User A가 point를 2회 연속으로 발급받는 transaction 을 생각해보자.

    • 일간 출석체크와 주간 출석체크가 동시에 완료되면 이런경우가 생기겠지?

    만약 격리수준이 Read Uncommited 라면 다른 트랜잭션의 데이터를 읽을수 있기에 아래와 같은 상황에서 문제가 생길 수 있다.

    이럼 어떤문제가 생기는지 Error를 가정해보자

    홀리몰리...

    어떻게 해결하지?


    Read commited

    • 다른 데이터베이스 트랜잭션의 데이터를 읽을 수 없는 격리수준

    어떻게 해결되었을까?

    "잔액이 부족합니다." 덕분에 다른 트랜잭션도 롤백이 되는걸 볼 수 있다

    완벽한 방법일까?

    요런 상황을 가정해보자.

    • 계좌 2개를 조회하면서 중간에 송금을 진행하는 경우

    송금하기전에 데이터를 읽었는데 돈이 없어지는 사태가 발생한다.
    물론 다시 읽으면 문제가 없겠지만 이런 한번의 경우로 일관성이 깨진다.

    어떻게 해결할 수 있을까?
    스냅숏을 이용해 해당 문제를 해결해 보자


    Repeatable Read

    • tx번호를 매기고 해당 자신의 tx에서 값을 가져오도록 스냅숏을 관리한다.

    오호.. 이제는 Tx1에서 데이터를 읽을 것이니 일관성을 지킬 수 있었다.

    이제 완벽할까?

    Serializable은 다음번에..

    댓글

Designed by Tistory.