| 젠 토토 9.2.24 문서 | ||||
|---|---|---|---|---|
| PostgreSQL : 문서 : 9.2 : 명시 적 토토 꽁 머니 | 사설 토토 : 문서 : 9.2 : 동시성 제어 | 13장. 동시성 제어 | 무지개 토토 : 문서 : 9.2 : 경고 | |
데이터에 관한 비즈니스 규칙을 시행하는 것은 매우 어렵습니다. 읽기 커밋된 트랜잭션을 사용하는 무결성 데이터는 각 명령문마다 이동하고 있으며 심지어 단일 명령문은 다음과 같은 경우 명령문의 스냅샷으로 제한되지 않을 수 있습니다. 쓰기 충돌이 발생합니다.
반복 읽기 트랜잭션은 실행 전반에 걸쳐 젠 토토를 사용하는 데 미묘한 문제가 있습니다.MVCC데이터 스냅샷 일관성 검사(다음과 같은 내용 포함)읽기/쓰기 충돌. 하나의 트랜잭션이 쓰는 경우 데이터와 동시 트랜잭션이 동일한 데이터를 읽으려고 시도합니다. (쓰기 전후에 관계없이) 작업을 볼 수 없습니다. 다른 거래. 그러면 독자가 실행한 것처럼 보입니다. 어느 것이 먼저 시작되었는지, 어느 것이 먼저 커밋되었는지에 관계없이 먼저 수행됩니다. 이 정도라면 문제는 없지만, 리더는 동시 트랜잭션에서 읽은 데이터도 씁니다. 이제 이전에 실행된 것으로 보이는 트랜잭션이 있습니다. 앞서 언급한 거래 중 하나입니다. 만약 마지막으로 실제로 커밋을 실행한 것으로 보이는 트랜잭션 첫째, 사이클이 그래프에 나타나는 것은 매우 쉽습니다. 거래 실행 순서. 이런 사이클이 있을 때 오류가 발생하면 무결성 검사가 제대로 작동하지 않습니다. 도와주세요.
에서 언급한 바와 같이섹션 13.2.3, 직렬화 가능 트랜잭션은 단지 반복 가능한 읽기 트랜잭션일 뿐입니다. 위험한 패턴에 대한 비차단 모니터링을 추가합니다. 읽기/쓰기 충돌. 패턴이 감지되면 명백한 실행 순서로 사이클이 발생합니다. 관련된 트랜잭션은 롤백되어 주기를 중단합니다.
직렬화 가능한 트랜잭션 격리 수준이 다음에 사용되는 경우 일관된 보기가 필요한 모든 쓰기 및 모든 읽기에 대해 데이터의 일관성을 보장하기 위해 다른 노력이 필요하지 않습니다. 사용하도록 작성된 다른 환경의 소프트웨어 일관성을 보장하려면 직렬화 가능한 트랜잭션이 있어야 합니다."그냥 일하세요"이와 관련하여포스트그레SQL.
이 기술을 사용하면 애플리케이션 프로그래머에게 불필요한 부담을 주는 경우 응용 프로그램 소프트웨어는 프레임워크를 통과합니다. 롤백된 트랜잭션을 자동으로 재시도합니다. 직렬화 실패. It may be a good idea to setdefault_transaction_isolation에직렬 가능. 좀 가져가는 것도 현명할 것 같아요 다른 트랜잭션 격리 수준이 없는지 확인하는 조치 실수로 또는 무결성 검사를 파괴하기 위해 사용된 경우 트랜잭션 격리 수준 확인을 통해 트리거합니다.
참조섹션 13.2.3성능 제안용.
| 경고 |
|
이 수준의 무결성 보호는 다음을 사용합니다. 직렬화 가능한 트랜잭션은 아직 핫으로 확장되지 않습니다. 대기 모드(와이즈 토토 : 문서 : 9.2 :). 그렇기 때문에 Hot Standby를 사용하는 사람들은 반복 읽기 및 명시적 잠금을 사용하고 싶습니다. 마스터. |
직렬화할 수 없는 쓰기가 가능한 경우 행의 현재 유효성을 확인하고 동시 발생으로부터 보호합니다. 반드시 사용해야 하는 업데이트선택 대상 업데이트, 공유 선택또는 적절한락 테이블성명. (업데이트를 위해 선택그리고공유 선택반환된 행만 잠그세요 동시 업데이트에 반대하는 반면잠금 표테이블 전체를 잠급니다.) 이 내용은 애플리케이션을 포팅할 때 계정젠 토토다른 환경에서.
또한 다른 환경에서 변환하는 사람들에 대한 참고 사항은 다음과 같습니다. 사실은업데이트를 위해 선택그렇습니다 동시 트랜잭션이 업데이트되지 않거나 선택한 행을 삭제합니다. 그렇게 하려면젠 토토실제로 업데이트해야 합니다. 값을 변경할 필요가 없는 경우에도 마찬가지입니다.업데이트를 위해 선택 일시적으로 차단기타 동일한 잠금을 획득하거나 실행하는 트랜잭션업데이트또는삭제잠긴 행에 영향을 주지만, 이 잠금을 보유한 트랜잭션이 커밋되거나 롤백되면 차단된 거래는 충돌하는 작업으로 진행됩니다. 실제가 아닌 이상업데이트행의 잠금이 유지되는 동안 수행되었습니다.
전역 유효성 검사에는 다음 사항에 대한 추가 고려가 필요합니다. 직렬화 불가능MVCC. 에 대한 예를 들어, 은행 애플리케이션은 합계를 확인하려고 할 수 있습니다. 한 테이블의 모든 크레딧은 다른 테이블의 차변 합계와 같습니다. 두 테이블이 모두 활발하게 업데이트되는 경우. 비교 두 번의 연속 결과선택 합(...)커밋된 읽기에서는 명령이 안정적으로 작동하지 않습니다. 모드, 두 번째 쿼리에는 다음의 결과가 포함될 가능성이 높기 때문입니다. 첫 번째로 계산되지 않은 거래. 두 개의 합을 한 번에 계산하기 단일 반복 가능한 읽기 트랜잭션은 정확한 정보를 제공합니다. 커밋된 트랜잭션의 효과만을 보여주는 그림 반복 가능한 읽기 트랜잭션이 시작되기 전에 — 그러나 그 대답이 여전히 관련성이 있는지 합법적으로 궁금해합니다. 배달되는 시간. 반복 가능한 읽기 트랜잭션 자체가 일관성을 유지하기 전에 몇 가지 변경 사항을 적용했습니다. 수표의 유용성은 더욱 논란의 여지가 있습니다. 지금은 거래 시작 후 일부가 포함되지만 전부는 아닙니다. 변화. 그러한 경우 주의 깊은 사람은 모든 항목을 잠그고 싶을 수도 있습니다. 확실한 결과를 얻기 위해 수표에 필요한 테이블 현재 현실의 사진. 갑공유모드(또는 그 이상) 잠금은 커밋되지 않은 항목이 없음을 보장합니다. 현재 테이블이 아닌 잠긴 테이블의 변경 사항 거래.
또한 명시적인 잠금에 의존하는 경우 동시 변경을 방지하려면 읽기를 사용해야 합니다. 커밋 모드 또는 반복 읽기 모드에서는 다음 사항을 확보해야 합니다. 쿼리를 수행하기 전에 잠금을 수행합니다. a에 의해 획득된 잠금 반복 가능한 읽기 트랜잭션은 다른 트랜잭션이 없음을 보장합니다. 테이블을 수정하는 트랜잭션이 계속 실행 중이지만 잠금을 획득하기 이전에 트랜잭션에서 본 스냅샷 테이블에서 현재 커밋된 일부 변경 사항보다 앞선 것일 수 있습니다. 에이 반복 읽기 트랜잭션의 스냅샷은 실제로 동결됩니다. 첫 번째 쿼리 또는 데이터 수정 명령의 시작 (선택, 삽입, 업데이트또는삭제)이므로 다음을 얻을 수 있습니다. 스냅샷이 고정되기 전에 명시적으로 잠깁니다.