ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 데이터베이스 격리수준
    Computer Science/데이터베이스 2020. 9. 24. 01:16

    격리수준이란?

    동시에 여러 트랜잭션이 처리될 때, 트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 것
    특정 트랜잭션이 다른 트랜잭션에 변경한 데이터를 볼 수 있도록 허용할지 말지를 결정하는 것

     

    Oracle

    Read Commit

    트랜잭션 A가 시작된 후 update 쿼리를 날린다.

    이 타이밍에 트랜잭션 B도 시작되고 select 쿼리를 날린다.

    이때 트랜잭션 B의 select 쿼리의 결과는 장보고가 아닌 임꺽정이 나온다. (변경이 적용 안됨)

    왜냐하면 Oracle은 데이터를 읽을 때 커밋된 것만 읽는다. (Read Commit)

    트랜잭션이 종료되어 commit을 날리기 전까지 select 결과는 위와 같다.

    commit이 된 후 트랜잭션 B에서 select 쿼리를 날리면 드디어 장보고가 나온다.

     

    Oracle에서 데이터의 CRUD 쿼리가 날라오면, 이전의 데이터를 저장하는 Undo 영역에 저장이되고, select가 발생하면 Undo 영역의 데이터를 읽는다.

    commit이 되면 Undo 영역의 데이터가 변경된다. 

     

    MySQL

    InnoDB 스토리지 엔진 사용

    Repeatable Read 수준 이상의 격리 수준을 사용하여 데이터 부정합을 방지한다.

     

    Repeatable Read

    트랜잭션 A가 시작된 후 update 쿼리를 날린다.

    이 타이밍에 트랜잭션 B도 시작되고 select 쿼리를 날린다.

    이때 트랜잭션 B의 select 쿼리의 결과는 장보고가 아닌 임꺽정이 나온다.

    commit이 된 후 트랜잭션 B에서 select 쿼리를 날려도 결과는 임꺽정이 나온다.

    트랜잭션 B가 종료되기 전까지 항상 동일한 결과를 보여준다.

     

    Repeatable Read 전략은 자기 트랜잭션보다 낮은 Undo 로그를 보고 select를 하기 때문에 데이터의 부정합을 방지할 수 있다. (트랜잭션 영역 내에서 동일한 데이터를 보장해줌)

    댓글

Designed by Tistory.