토토의 관점이 각 명령문으로 바뀌기 때문에 읽기 커밋 된 트랜잭션을 사용하여 토토 무결성에 관한 비즈니스 규칙을 시행하는 것은 매우 어렵고, 단일 문서조차도 문자 충돌이 발생하면 문의 스냅 샷으로 제한되지 않을 수 있습니다.
반복 가능한 읽기 트랜잭션은 실행 전반에 걸쳐 토토에 대한 안정적인 견해를 가지고 있지만 사용에 미묘한 문제가 있습니다MVCC토토 일관성 검사를위한 스냅 샷,충돌 읽기/쓰기. 한 트랜잭션이 토토를 작성하고 동시 트랜잭션이 동일한 토토를 읽으려고 시도하면 (쓰기 전후에) 다른 트랜잭션의 작업을 볼 수 없습니다.
언급 된대로섹션 13.2.3, 직렬화 가능한 트랜잭션은 위험한 읽기/쓰기 충돌 패턴에 대한 비 차단 모니터링을 추가하는 반복 가능한 읽기 트랜잭션입니다. 명백한 실행 순서에서 사이클을 유발할 수있는 패턴이 감지되면 관련된 트랜잭션 중 하나가주기를 깨뜨리기 위해 롤백됩니다.
직렬화 가능한 트랜잭션 격리 수준이 모든 쓰기 및 토토에 대한 일관된 견해가 필요한 모든 읽기에 사용되면 일관성을 보장하기 위해 다른 노력이 필요하지 않습니다. 일관성을 보장하기 위해 직렬화 가능한 트랜잭션을 사용하도록 작성된 다른 환경의 소프트웨어“Just Work”이와 관련하여PostgreSQL.
이 기술을 사용할 때 응용 프로그램 소프트웨어가 직렬화 실패로 롤백 된 트랜잭션을 자동으로 검색하는 프레임 워크를 통과하는 경우 응용 프로그램 프로그래머에 대한 불필요한 부담을 피할 수 있습니다. 설정하는 것이 좋습니다default_transaction_isolation
toSERIALIZALE
. 트리거의 트랜잭션 격리 수준의 점검을 통해 실수로 또는 무결성 점검을 전복시키지 않도록 조치를 취하는 것이 현명 할 것입니다..
참조섹션 13.2.3성능 제안.
직렬화 가능한 트랜잭션을 사용한이 무결성 보호 수준은 아직 핫 스탠드 모드로 확장되지 않습니다 (섹션 26.4) 또는 논리적 복제품. 그로 인해 핫 스탠드 또는 논리적 복제를 사용하는 사람들은 1 차에 반복 가능한 읽기 및 명백한 잠금을 사용하기를 원할 수 있습니다.
비 서리화 할 수없는 쓰기가 가능하면 행의 현재 유효성을 보장하고 동시 업데이트로부터 보호하기 위해 사용해야합니다업데이트 선택
, 공유 선택
또는 적절한잠금 테이블
진술. (업데이트 선택
and공유 선택
반환 된 행을 동시 업데이트에 대해 잠그십시오.잠금 테이블
전체 테이블을 잠그십시오.) 응용 프로그램을 포팅 할 때를 고려해야합니다.PostgreSQL다른 환경에서.
다른 환경에서 변환하는 사람들에게도 주목할 만하다.업데이트 선택
동시 트랜잭션이 선택한 행을 업데이트하거나 삭제하지 않도록 보장하지 않습니다.PostgreSQL값을 변경할 필요가 없어도 실제로 행을 업데이트해야합니다.업데이트 선택
일시적으로 차단동일한 잠금을 취득하거나 AN을 실행하는 다른 거래업데이트
또는삭제
잠긴 행에 영향을 미치지 만,이 잠금을 보유한 트랜잭션이 커밋되거나 롤백되면, 차단 된 트랜잭션은 실제가 아닌 한 충돌 작업을 진행합니다.업데이트
잠금 장치가 유지되는 동안 행의 행이 수행되었습니다.
글로벌 유효성 점검에는 비 서리 화 할 수없는 추가 사고가 필요합니다MVCC. 예를 들어, 은행 응용 프로그램은 한 테이블의 모든 크레딧의 합이 두 테이블이 적극적으로 업데이트 될 때 다른 테이블의 회고 합계와 같는지 확인할 수 있습니다.SOLE SUM (...)
두 번째 쿼리에는 첫 번째 쿼리가 포함되지 않은 트랜잭션 결과가 포함되므로 명령은 Read Commited Mode에서 안정적으로 작동하지 않습니다. 단일 반복 가능한 읽기 트랜잭션에서 두 합계를 수행하면 반복 가능한 읽기 트랜잭션이 시작되기 전에 저지른 트랜잭션의 영향에 대한 정확한 그림을 제공 할 수 있지만, 전달 될 때까지 답이 여전히 관련이 있는지 여부를 합법적으로 궁금해 할 수 있습니다.공유
모드 (또는 더 높은) 잠금 잠금 장치는 현재 트랜잭션의 것 외에 잠긴 테이블에 미치광이 변경 사항이 없음을 보장합니다..
동시 변경을 방지하기 위해 명시 적 잠금에 의존하는 경우 쿼리를 수행하기 전에 쿼리를 수행하기 전에 자물쇠를 얻도록주의해야합니다. 반복 가능한 읽기 트랜잭션에 의해 얻은 잠금은 테이블을 수정하는 다른 트랜잭션이 여전히 실행되지 않도록 보장하지만, 트랜잭션에서 볼 수있는 스냅 샷이 잠금 장치를 얻는 경우, 현재 커미셔닝 된 일부 변경 사항을 사전 할 수 있습니다.select
, 삽입
, 업데이트
, 삭제
또는병합
), 스냅 샷이 얼기 전에 명시 적으로 잠금을 얻을 수 있습니다.