이 문서는 지원되지 않는 PostgreSQL 버전에 대한 것입니다.
다음에 대한 동일한 페이지를 보고 싶을 수도 있습니다.PostgreSQL : 문서 : 17 : 13.4. 응용 프로그램 수준에서의 토토 핫 일관성 검사버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

13.4. 애플리케이션 수준의 사설 토토 사이트 일관성 검사

사설 토토 사이트 보기가 각 명령문에 따라 이동하고 쓰기 충돌이 발생하면 단일 명령문이라도 명령문의 스냅샷으로 제한되지 않을 수 있기 때문에 커밋된 읽기 트랜잭션을 사용하여 사설 토토 사이트 무결성에 관한 비즈니스 규칙을 시행하는 것은 매우 어렵습니다.

반복 읽기 트랜잭션은 실행 전반에 걸쳐 사설 토토 사이트에 대한 안정적인 보기를 제공하지만 사용 시 미묘한 문제가 있습니다.MVCC데이터 일관성 검사를 위한 스냅샷, 다음과 같은 내용 포함읽기/쓰기 충돌. 한 트랜잭션이 데이터를 쓰고 동시 트랜잭션이 동일한 데이터(쓰기 전후에 관계없이)를 읽으려고 시도하는 경우 다른 트랜잭션의 작업을 볼 수 없습니다. 그런 다음 리더는 어느 것이 먼저 시작되었는지, 어느 것이 먼저 커밋되었는지에 관계없이 먼저 실행된 것처럼 보입니다. 이 정도라면 문제가 없습니다. 그러나 판독기가 동시 트랜잭션에서 읽은 데이터를 쓰는 경우에는 이전에 언급한 트랜잭션 중 하나 이전에 실행된 것처럼 보이는 트랜잭션이 있습니다. 마지막에 실행된 것으로 보이는 트랜잭션이 실제로는 먼저 커밋되면 해당 트랜잭션의 실행 순서를 그래프로 주기가 나타나기 매우 쉽습니다. 이러한 주기가 나타나면 일부 도움 없이는 무결성 검사가 올바르게 작동하지 않습니다.

에서 언급한 바와 같이섹션 13.2.3, 직렬화 가능 트랜잭션은 읽기/쓰기 충돌의 위험한 패턴에 대한 비차단 모니터링을 추가하는 반복 가능한 읽기 트랜잭션입니다. 명백한 실행 순서대로 주기를 일으킬 수 있는 패턴이 감지되면 관련된 트랜잭션 중 하나가 롤백되어 주기를 중단합니다.

13.4.1. 직렬화 가능한 트랜잭션의 일관성 강화

직렬화 가능 트랜잭션 격리 수준이 데이터의 일관된 보기가 필요한 모든 쓰기 및 읽기에 사용되는 경우 일관성을 보장하기 위해 다른 노력이 필요하지 않습니다. 일관성을 보장하기 위해 직렬화 가능한 트랜잭션을 사용하도록 작성된 다른 환경의 소프트웨어는 다음과 같습니다.그냥 일하세요이와 관련하여PostgreSQL.

이 기술을 사용하면 응용 프로그램 소프트웨어가 직렬화 실패로 롤백된 트랜잭션을 자동으로 재시도하는 프레임워크를 통과하는 경우 응용 프로그램 프로그래머에게 불필요한 부담을 주지 않을 것입니다. 설정하는 것이 좋습니다.default_transaction_isolation직렬 가능. 실수로 또는 무결성 검사를 파괴하기 위해 트리거의 트랜잭션 격리 수준 검사를 통해 다른 트랜잭션 격리 수준이 사용되지 않도록 몇 가지 조치를 취하는 것도 현명할 것입니다.

참조섹션 13.2.3성능 제안용.

경고

직렬화 가능 트랜잭션을 사용하는 이 무결성 보호 수준은 아직 상시 대기 모드로 확장되지 않습니다. (PostgreSQL : 문서 : 11 : 26.5. 뜨거운 배트맨 토토). 따라서 상시 대기를 사용하는 사용자는 반복 읽기 및 마스터에 대한 명시적 잠금을 사용하는 것이 좋습니다.

13.4.2. 명시적 차단 잠금으로 일관성 강화

직렬화할 수 없는 쓰기가 가능한 경우 행의 현재 유효성을 보장하고 동시 업데이트로부터 이를 보호하려면 사용해야 합니다.업데이트를 위해 선택, 공유 선택또는 적절한락 테이블성명. (업데이트를 위해 선택그리고공유 선택동시 업데이트에 대해 반환된 행만 잠그는 반면락 테이블테이블 전체를 잠급니다.) 애플리케이션을 다음으로 포팅할 때 이 점을 고려해야 합니다.PostgreSQL다른 환경에서.

또한 다른 환경에서 전환하는 사람들에 대한 참고 사항은 다음과 같습니다.업데이트를 위해 선택동시 트랜잭션이 선택한 행을 업데이트하거나 삭제하지 않도록 보장하지 않습니다. 그렇게 하려면PostgreSQL값을 변경할 필요가 없더라도 실제로 행을 업데이트해야 합니다.업데이트를 위해 선택 일시적으로 차단동일한 잠금을 획득하거나 실행하는 다른 트랜잭션업데이트또는삭제잠긴 행에 영향을 주지만 일단 이 잠금을 보유한 트랜잭션이 커밋되거나 롤백되면 차단된 트랜잭션은 실제 충돌이 발생하지 않는 한 충돌하는 작업을 계속하게 됩니다.업데이트해당 행이 잠금이 유지되는 동안 수행되었습니다.

전역 유효성 검사에는 직렬화 불가능 상태에서 추가 고려가 필요합니다.MVCC. 예를 들어, 은행 애플리케이션은 두 테이블이 모두 업데이트될 때 한 테이블의 모든 대변 합계가 다른 테이블의 차변 합계와 동일한지 확인하려고 할 수 있습니다. 두 개의 연속 결과 비교합계 선택(...)커밋 읽기 모드에서는 명령이 안정적으로 작동하지 않습니다. 두 번째 쿼리에는 첫 번째 쿼리에서 계산되지 않은 트랜잭션 결과가 포함될 가능성이 높기 때문입니다. 단일 반복 읽기 트랜잭션에서 두 가지 합계를 수행하면 반복 읽기 트랜잭션이 시작되기 전에 커밋된 트랜잭션의 효과에 대한 정확한 그림만 제공되지만 응답이 전달될 때까지 답변이 여전히 관련이 있는지 합법적으로 궁금해할 수 있습니다. 반복 가능한 읽기 트랜잭션 자체가 일관성 검사를 시도하기 전에 일부 변경 사항을 적용한 경우 검사의 유용성은 훨씬 더 논쟁의 여지가 있습니다. 이제 트랜잭션 시작 후 변경 사항 전체가 아닌 일부가 포함되기 때문입니다. 그러한 경우, 주의 깊은 사람은 현재 현실에 대한 확실한 그림을 얻기 위해 수표에 필요한 모든 테이블을 잠그기를 원할 수 있습니다. 에이공유모드(또는 그 이상) 잠금은 잠긴 테이블에 현재 트랜잭션 외에 커밋되지 않은 변경 사항이 없음을 보장합니다.

또한 동시 변경을 방지하기 위해 명시적 잠금에 의존하는 경우 커밋된 읽기 모드를 사용하거나 반복 가능한 읽기 모드에서 쿼리를 수행하기 전에 잠금을 획득하도록 주의해야 합니다. 반복 가능한 읽기 트랜잭션에 의해 확보된 잠금은 테이블을 수정하는 다른 트랜잭션이 아직 실행 중이 아님을 보장하지만, 트랜잭션에 표시된 스냅샷이 잠금을 획득하기 이전인 경우 테이블에서 현재 커밋된 일부 변경 사항보다 앞설 수 있습니다. 반복 가능한 읽기 트랜잭션의 스냅샷은 실제로 첫 번째 쿼리 또는 데이터 수정 명령 시작 시 고정됩니다(선택, 삽입, 업데이트, 또는삭제), 따라서 스냅샷이 고정되기 전에 명시적으로 잠금을 얻을 수 있습니다.