2011-04-20 4 views
5

우리는 어떤 시나리오에서 SERIALIZABLE 격리 수준을 사용합니까? 저는 웹 사이트에서 거래가 완전하게 분리되기를 원할 때 대개이 문제를 해결할 수있는 답변을 보았습니다.Seralization 격리 수준의 실제 사용?

자신의 경험으로 알고 싶은 것은 프로젝트에서이 프로젝트를 사용하거나 다른 프로젝트에서이 프로젝트를 사용했을 때 충족되지 않았던 특정 요구 사항이 무엇 이었는지입니다. 다른 격리 수준으로?

답변

6

SERIALIZABLE은 여러 쿼리가 필요한 복잡한 보고서를 작성할 때 유용합니다.

READ COMMITTED 또는 REPEATABLE READ에서 쿼리는 트랜잭션 시작과 실행 사이의 변경 사항을 볼 수 있습니다.

pg_dumpPostgreSQL 덤프 유틸리티는 데이터베이스의 상태는 유틸리티가 실행 된 순간의 일 것 덤프되는 것을 보장하기 위해, SET TRANSACTION ISOLATION LEVEL SERIALIZABLE 발행과 그것을 작업을 시작하고, 데이터베이스에 대한 후속 변경은 방해하지 수 덤프.

2

SERIALIZABLE 트랜잭션은 동시로드의 정확성을 간단하게 증명하려는 경우에 유용합니다. SQL 표준의 직렬화 가능 트랜잭션 격리 수준 (SQL-92부터)의 정의는 직렬 가능 트랜잭션의 동시 세트의 동작이 일부 직렬 (한 번에 하나씩) 실행 순서와 일치해야한다는 것이므로 모든 트랜잭션이 단독으로 실행될 때 올바른 작업을 수행 할 수있는 트랜잭션은 의 일부로 올바른 작업을 수행합니다. 일련의 트랜잭션이 혼합되어 있습니다.

이 보호는 비용이 발생합니다. 직렬화가 가능한 트랜잭션 격리를 보장하려면 트랜잭션을 다시 시도하기 위해 차단하거나 롤백해야하며 이러한 작업을 수행해야 할시기를 결정하기 위해 정보를 추적해야합니다. 적은 수의 트랜잭션 유형과 소수의 개발자가있는 일부 개발 환경에서는 덜 엄격한 격리 수준을 사용하고 응용 프로그램 코드에서 경쟁 조건을 명시 적으로 관리하는 것이 비용 효율적입니다. 수십 개의 테이블과 수만 개의 트랜잭션 유형이있는 스키마에 대해 수십 명의 프로그래머가 작업하면 경쟁 조건이 존재하는 위치를 결정하는 비용이 덜 엄격한 격리 수준에서 압도적으로 높아질 수 있으며 일반적으로 직렬화 가능 트랜잭션을 사용하는 것이 비용 효율적이됩니다. .

현재 가장 많이 구현되는 직렬 가능 트랜잭션 제공 방법은 엄격한 2 단계 잠금 (S2PL)입니다.이 2 단계 잠금은 각 트랜잭션의 끝까지 보유 된 잠금을 차단하고 교착 상태를 중단하기 위해 롤백으로 교착 상태를 감지합니다. 쓰기 경합이 거의없는로드에서는 낙관적 동시성 제어 (OCC)를 사용할 수 있습니다. 트랜잭션 중에 "읽기 세트"를 추적하고 다른 트랜잭션이 읽기 세트를 수정하면 롤백합니다. 일부 데이터베이스 제품은 SQL 표준에서 요구하는 보증을 실제로 제공하지는 않지만 스냅 샷 격리를 직렬화 가능이라고 지칭합니다. Serializable Snapshot Isolation (SerializableSI 또는 SSI)이라는 새로운 기술은 2008 ACM SIGMOD에서 발표 된 학술 논문에 처음 기술되었으며 PostgreSQL 버전 9.1 이상에서 사용되었습니다. 스냅 샷 격리와 읽기 - 쓰기 종속성 패턴의 추적을 사용하여 트랜잭션을 취소해야 할시기를 결정합니다. 생산에 자주 사용되지 않는 다른 기술이 있습니다. 이들 각각에는 장점과 단점이 있으며, 이와 같은 질문에 대해 다른 손익 분기점을 제공합니다.