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

13.4. 데이터 일관성 검사 응용 프로그램 수준

데이터와 관련하여 비즈니스 규칙을 시행하는 것은 매우 어렵습니다. 의 관점 때문에 저지른 트랜잭션을 사용한 무결성 데이터는 각 진술에 따라 이동하고 심지어 단일 진술은 쓰기 갈등이 발생합니다.

반복 가능한 읽기 트랜잭션은 실행 전반에 걸쳐 데이터를 사용하는 데있어 미묘한 문제가 있습니다.MVCC데이터 용 스냅 샷 일관성 검사,와 관련된충돌 읽기/쓰기. 하나의 거래가 쓴 경우 데이터 및 동시 거래 시도는 동일한 데이터를 읽으려고합니다. (쓰기 전후에 관계없이) 다른 거래. 그런 다음 독자는 실행 된 것으로 보입니다 먼저 먼저 시작했거나 먼저 커밋 한 것입니다. 그것이 진행되는 한, 문제가 없지만 독자는 또한 동시 거래에 의해 읽는 데이터도 작성합니다. 이제 이전에 실행 된 것으로 보이는 거래가 있습니다. 앞에서 언급 한 트랜잭션 중 하나입니다. 만약 마지막으로 실행 된 것으로 보이는 트랜잭션은 실제로 저작합니다 첫째, 사이클이 거래 실행 순서. 그러한주기 일 때 나타나면, 무결성 검사는 일부 없이는 올바르게 작동하지 않습니다 돕다.

언급 된대로섹션 13.2.3, 직렬화 가능한 트랜잭션은 반복 가능한 읽기 트랜잭션입니다 위험한 패턴에 대한 비 블로킹 모니터링을 추가합니다 충돌을 읽고 쓰십시오. 패턴이 감지 될 때 명백한 실행 순서의주기를 유발합니다. 관련된 거래는주기를 깨뜨리기 위해 롤백됩니다.

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

직렬화 가능한 트랜잭션 격리 수준이 사용되는 경우 모든 글과 일관된 견해가 필요한 모든 읽기에 대해 데이터는 일관성을 보장하기 위해 다른 노력이 필요하지 않습니다. 사용하기 위해 작성된 다른 환경의 소프트웨어 일관성을 보장하기위한 직렬화 가능한 거래"그냥 일"이와 관련하여윈 토토.

이 기술을 사용할 때는 생성을 피할 수 있습니다 응용 프로그램 프로그래머에 대한 불필요한 부담 응용 프로그램 소프트웨어는 프레임 워크를 통과합니다 a 직렬화 실패. 설정하는 것이 좋습니다default_transaction_isolationtoSERIALIZABLE. 일부를 취하는 것도 현명 할 것입니다 다른 거래 격리 수준이 없도록 조치 실수로 또는 무결성 검사를 파괴하는 데 사용 거래 격리 수준의 점검을 통해 트리거.

참조섹션 13.2.3성능 제안.

경고

이 수준의 무결성 보호를 사용합니다 직렬화 가능한 트랜잭션은 아직 핫으로 확장되지 않습니다 대기 모드 (토토 사이트 : 문서 : 9.1 :). 그로 인해 핫 스탠드를 사용하는 사람들은 5 월을 사용합니다 반복 가능한 읽기 및 명시 적 잠금을 사용하고 싶습니다. 주인.

13.4.2. 일관성 시행 명시 적 차단 잠금 장치

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

다른 환경에서 변환하는 사람들에게도 사실업데이트 선택동시 거래가 업데이트되지 않거나 선택한 행을 삭제하십시오.윈 토토실제로 업데이트해야합니다 값을 변경할 필요가 없어도 행,업데이트 선택 일시적으로 차단기타 동일한 잠금을 취득하거나 an을 실행하는 거래업데이트또는삭제잠긴 행에 영향을 미칠 것입니다 이 자물쇠를 보유한 거래가 커밋되거나 롤백되면 차단 된 거래는 상충되는 운영을 진행합니다 실제가 아니라면업데이트자물쇠가 잡히는 동안 수행되었습니다.

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

또한 명백한 잠금에 의존하는 경우 동시 변경을 방지하면 읽기를 사용해야합니다 커밋 된 모드 또는 반복 가능한 읽기 모드에서 조심해야합니다. 쿼리를 수행하기 전에 잠금. a 반복 가능한 읽기 트랜잭션은 다른 사람이 없음을 보장합니다 테이블을 수정하는 트랜잭션은 여전히 ​​실행 중이지만 트랜잭션에서 볼 수있는 스냅 샷은 잠금을 얻는 사전입니다. 테이블에서 현재 커미셔닝 된 일부 변경 사항이있을 수 있습니다. 에이 반복 가능한 읽기 트랜잭션의 스냅 샷은 실제로 얼어 붙었습니다 첫 번째 쿼리 또는 데이터 수정 명령의 시작 (select, 삽입, 업데이트또는삭제)이므로 얻을 수 있습니다 스냅 샷이 얼기 전에 명시 적으로 잠금.