[DB] Transaction Isolation

Na young·2024년 1월 12일
0

DB

목록 보기
5/17

10. Transaction Isolation

10.1 격리수준 (Isolation Level)

  • 커밋과 롤백

격리성: 모든 트랜잭션은 다른 트랜잭션으로부터 독립되어야 한다

동시에 여러 개의 트랜잭션들이 수행될 때, 각 트랜젝션은 고립되어 있어 연속으로 실행된 것과 동일한 결과를 나타낸다.

  • 예시 예를 들어 계좌에 만 원이 있다고 가정한다. 이 계좌로부터 계좌 B로 6천 원을, 계좌 C로 6천 원을 동시에 계좌 이체하는 경우, 계좌 B에 먼저 송금한 뒤 계좌 C에 보내는 결과와 동일해야 한다. 동시에 트랜잭션을 실행한다고 해서 계좌 B와 C에 각각 6천 원씩 송금하여 마이너스 통장이 되는 것이 아니다. 각각의 송금 작업을 연속으로 실행하는 것과 동일한 결과가 나타나야 한다. 격리성을 지키는 각 트랜젝션은 철저히 독립적이기 때문에, 다른 트랜젝션의 작업 내용을 알 수 없다. 그리고 트랜잭션이 동시에 실행될 때와 연속으로 실행될 때의 데이터베이스 상태가 동일해야 한다.

격리수준: 트랜잭션이 동시에 동일한 테이블/레코드에 접근할 때 적용하는 규칙

https://goodbyeanma.tistory.com/23

  1. Read Uncommitted

    가장 낮은 수준의 격리 수준

    커밋 되지 않은 데이터에 접근가능

    데이터 안정성이 낮고, 성능이 높음

    데이터를 읽을 때 커밋되지 않는 변경사항(dirty reads) 발생 (즉, 아직 커밋되지 않은 상태의 데이터도 읽을 수 있음)

  2. Read Commited

    커밋 된 데이터에만 접근가능

    가장 많이 사용하는 격리 수준

    Non-Repeactable Read 현상 발생 : 동일한 트랜잭션 안에서 동일한 쿼리의 결과가 다른 경우가 발생함

  3. Repeatable Read

    동일한 트랜잭션에서는 한 쿼리의 값은 항상 일정함

    Phantom Read 현상 발생 : 데이터 변경은 불가, 추가 삭제는 가능

    백업이나 복제같은 긴 시간동안 동작하는 트랜잭션에서 안정적으로 실행해야할 때 사용

  1. Serializable (직렬화가능한)

    두 개의 트랜잭션이 동시에 수행 x

    데이터 안정성이 높고, 성능이 낮음

    Untitled

  • 오라클 : Read Committed
  • SQL : Repeatable Read (백업, 복제의 안정성 때문)
mysql> show variables like '%isolation%';
mysql> set tx_isolation=READ-COMMITTED;
mysql> show variables like '%isolation%';
profile
개발어린이

0개의 댓글

관련 채용 정보