이 문서는 지원되지 않는 버전의 PostgreSQL 용입니다.
당신은에 대해 같은 페이지를 보려고 할 수 있습니다PostgreSQL : 문서 : 17 : 13.4. 응용 프로그램 수준에서의 배트맨 토토 핫 일관성 검사버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

13.4. 배트맨 토토 일관성 검사 응용 프로그램 수준

배트맨 토토와 관련하여 비즈니스 규칙을 시행하는 것은 매우 어렵습니다. read commited transactions를 사용한 무결성 배트맨 토토는 각 진술과 단일 진술에 따라 배트맨 토토가 바뀌고 있습니다. 쓰기가있는 경우 진술의 스냅 샷으로 제한하지 않을 수 있습니다. 갈등이 발생합니다.

반복 가능한 읽기 트랜잭션은 안정적인 견해를 가지고 있습니다. 실행 전반에 걸쳐 배트맨 토토를 사용하는 데있어 미묘한 문제가 있습니다.MVCC배트맨 토토 용 스냅 샷 일관성 검사,와 관련된충돌 읽기/쓰기. 하나의 거래가 쓴 경우 데이터 및 동시 거래 시도는 동일한 데이터를 읽으려고합니다. (쓰기 전후에 관계없이) 다른 거래. 그런 다음 독자는 먼저 실행 된 것으로 보입니다 어느 것이 먼저 시작되었거나 먼저 저지른 것인지에 관계없이. 만약 그렇다면 그것이 진행되는 한, 문제는 없지만 독자도 동시 거래에 의해 읽는 데이터를 기록합니다. 어느 쪽보다 먼저 실행 된 것으로 보이는 거래 이전에 언급 된 거래. 거래가 나타나는 경우 마지막으로 처음으로 실행되기 위해서는 매우 쉽습니다. 실행 순서의 그래프에 표시되는 사이클 업무. 그러한주기가 나타나면 무결성 검사는 그렇지 않습니다 도움없이 올바르게 일하십시오.

언급 된대로섹션 13.2.3, 직렬화 가능한 트랜잭션은 반복 가능한 읽기 트랜잭션입니다 위험한 패턴에 대한 비 차단 모니터링을 추가합니다 충돌을 읽고 쓰십시오. 패턴이 감지 될 때 명백한 실행 순서의주기, 거래 중 하나 사이클을 깨기 위해 관련된 관련이 있습니다.

13.4.1. 일관성을 시행합니다 직렬화 가능한 거래

직렬화 가능한 트랜잭션 격리 레벨이 모든 사람에게 사용되는 경우 배트맨 토토에 대한 일관된보기가 필요한 모든 읽기에 대해 일관성을 보장하기 위해 다른 노력이 필요하지 않습니다. 소프트웨어 직렬화 가능성을 사용하도록 작성된 다른 환경 일관성을 보장하기위한 거래"그냥 일하다"이와 관련하여PostgreSQL.

이 기술을 사용할 때 불필요한 생성을 피할 수 있습니다. 응용 프로그램 소프트웨어가 진행되는 경우 애플리케이션 프로그래머에 대한 부담 트랜잭션을 자동으로 검색하는 프레임 워크를 통해 직렬화 실패로 롤백됩니다. 좋은 생각 일 수 있습니다 설정하려면default_transaction_isolationtoSERIALIZALE. 또한 현명 할 것입니다 다른 거래 격리가 없도록 조치를 취하십시오. 수준은 실수로 또는 무결성 검사를 파괴하는 데 사용됩니다. 트리거의 거래 격리 수준의 점검을 통해.

참조섹션 13.2.3성능 제안.

경고

직렬화 가능성을 사용한이 수준의 무결성 보호 트랜잭션은 아직 핫 스탠드 모드로 확장되지 않습니다 (섹션 25.5). 그 때문에 사용하는 사람들 Hot Standby는 반복 가능한 읽기 및 명시 적 잠금을 사용하고 싶을 수 있습니다. 마스터.

13.4.2. 일관성을 시행합니다 명시 적 차단 잠금

서리화 할 수없는 쓰기가 가능할 때, 현재를 보장합니다 행의 유효성 및 동시 업데이트로부터 보호 사용해야업데이트 선택, 공유 선택또는 적절한잠금 테이블진술. (선택 updateand공유 선택잠금 동시 업데이트에 대한 반환 된 행만잠금 테이블전체 테이블을 잠그십시오.) 이것은해야합니다 응용 프로그램을 포팅 할 때 고려PostgreSQL다른 환경에서.

다른 환경에서 변환하는 사람들에게도 주목하십시오. 사실업데이트 선택그렇지 않습니다 동시 거래가 업데이트하거나 삭제되지 않도록하십시오. 선택된 행.PostgreSQL실제로 행을 업데이트해야합니다. 값을 변경할 필요가 없어도.선택 update 일시적으로 블록동일한 잠금을 취득하는 다른 거래 또는 실행업데이트또는삭제잠긴 행에 영향을 미치지만 한 번 이 자물쇠를 보유한 거래는 커밋되거나 롤백됩니다. 거래가 아닌 한 거래는 충돌하는 작업을 진행합니다 실제업데이트행의 수행이 수행되었습니다 자물쇠가 잡히는 동안.

글로벌 유효성 검사에는 추가 사고가 필요합니다 비 서리화할 수없는MVCC. 을 위한 예를 들어, 은행 신청은 한 테이블의 모든 크레딧은 다른 테이블의 회개 합계와 같습니다. 두 테이블이 적극적으로 업데이트 될 때. 결과 비교 두 가지 연속SOLE SUM (...)명령 두 번째 이후로 Commited Mode에서 안정적으로 작동하지 않습니다. 쿼리는 계산되지 않은 거래 결과가 포함될 것입니다. 첫 번째. 단일 반복 가능한 읽기에서 두 합계를 수행합니다 거래는 반복 가능한 읽기 거래 전에 저지른 거래 시작 - 그러나 대답이 전달 될 때까지 여전히 관련이 있습니다. 반복 가능한 읽기가있는 경우 거래 자체는 일관성 검사, 수표의 유용성이 더욱 논쟁의 여지가 있습니다. 그 이후로는 지금이지만 전부는 아닙니다 트랜잭션 후 시작 변경. 그러한 경우 신중한 사람 수표에 필요한 모든 테이블을 잠그고 싶을 수도 있습니다. 현재 현실에 대한 논란의 여지가없는 그림. 에이공유모드 (또는 더 높은) 잠금 장치는 거기를 보장합니다 잠긴 테이블의 변경 사항은 현재 거래.

예방을 위해 명시적인 잠금에 의존하는 경우 동시 변경, 읽기 커밋 모드를 사용하거나 또는 반복 가능한 읽기 모드에서는 이전에 잠금을 얻도록주의하십시오. 쿼리 수행. 반복 가능한 읽기에 의해 얻은 잠금 거래는 다른 거래를 수정하지 않음을 보장합니다 테이블은 여전히 ​​실행 중이지만 트랜잭션은 잠금을 얻는 일치하며 일부는 사전에 걸릴 수 있습니다 이제 테이블의 변경 사항이 있습니다. 반복 가능한 읽기 트랜잭션 스냅 샷은 실제로 첫 번째 쿼리가 시작될 때 동결되었습니다. 데이터 수정 명령 (select, 삽입, 업데이트, 또는삭제)이므로 얻을 수 있습니다 스냅 샷이 얼기 전에 명시 적으로 잠금.