programing

격리 레벨 - 직렬화 가능.언제 사용해야 하나요?

bestprogram 2023. 7. 16. 13:47

격리 레벨 - 직렬화 가능.언제 사용해야 하나요?

직렬화 가능한 격리 수준이 모든 격리 수준 중에서 가장 제한적인 것으로 알고 있습니다.어떤 종류의 애플리케이션이 이런 수준의 격리를 필요로 하는지, 아니면 언제 사용을 고려해야 하는지 궁금합니다.

자신에게 다음과 같은 질문을 합니다.트랜잭션이 실행되는 동안 다른 사용자가 데이터에 새 행을 삽입하면 문제가 됩니까?이것이 당신의 결과를 용납할 수 없는 방식으로 방해합니까?그렇다면 직렬화 가능 수준을 사용합니다.

트랜잭션 분리 레벨 설정에 관한 MSDN:

직렬화 가능

데이터 세트에 범위 잠금을 설정하여 트랜잭션이 완료될 때까지 다른 사용자가 데이터 세트에 행을 업데이트하거나 삽입할 수 없도록 합니다.이것은 네 가지 격리 수준 중 가장 제한적입니다.동시성이 낮으므로 필요한 경우에만 이 옵션을 사용합니다.이 옵션은 트랜잭션의 모든 SELECT 문에 있는 모든 테이블에 HOLD LOCK을 설정하는 것과 동일한 효과를 갖습니다.

따라서 트랜잭션은 모든 잠금을 사용 후 일반적으로 폐기되는 잠금도 전체 기간 동안 유지합니다.이렇게 하면 모든 트랜잭션이 한 번에 하나씩 실행되는 것처럼 표시되므로 SERIABLE이라는 이름이 사용됩니다.격리 수준에 대한 위키백과의 참고 사항:

직렬화 가능

이 격리 수준은 모든 트랜잭션이 완전히 격리된 방식으로 발생하도록 지정합니다. 즉, 시스템의 모든 트랜잭션이 순차적으로 실행된 것처럼 반복됩니다.DBMS는 직렬 실행의 환상이 유지될 수 있는 경우에만 두 개 이상의 트랜잭션을 동시에 실행할 수 있습니다.

SERIALIZABLE격리 수준은 트랜잭션이 서로 완전히 격리되는 비관적 동시성 제어를 기반으로 하는 가장 높은 격리 수준입니다.

ANSI/ISO 표준 SQL 92는 한 트랜잭션이 데이터를 읽을 때 다음과 같은 읽기 현상을 다루며 두 번째 트랜잭션에 의해 변경됩니다.

  • 더러운 읽을거리.
  • 분할할 수 없는 읽기
  • 환상적인 읽을거리

및 마이크로소프트 설명서는 다음 두 가지로 확장됩니다.

  • 손실된 업데이트
  • 행 업데이트로 인해 누락 및 이중 읽기 발생

다음 표에서는 다양한 분리 수준에 의해 활성화된 동시성 부작용을 보여 줍니다.

enter image description here

그렇다면 문제는 비즈니스 요구사항에서 허용하는 읽기 현상이 무엇인지, 그리고 하드웨어 환경에서 보다 엄격한 동시성 제어를 처리할 수 있는지 확인하는 것입니다.

참고로, 매우 흥미로운 것이 있습니다.SERIALIZABLE분리 수준 - SQL 표준에서 지정한 기본 분리 수준입니다. SQL 은 "SQL Server"입니다.READ COMMITTED.

또한 Transaction Locking and Row Versioning Guide에 대한 공식 문서는 많은 측면을 다루고 설명하는 훌륭한 장소입니다.

회계를 해보세요.계정의 거래는 적절한 계정 가치를 유지하고 신용 한도와 같은 것을 준수하기를 원한다면 본질적으로 직렬화될 수 있습니다.

행을 업데이트하려고 할 때 트랜잭션이 완료될 때까지 업데이트 프로세스를 차단하는 방식으로 동작합니다.

언급URL : https://stackoverflow.com/questions/3467613/isolation-level-serializable-when-should-i-use-this