이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다와이즈 토토 : 문서 : 17 : 62.4. 색인 잠금 고려 사항버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

54.4. 색인 잠금 고려 사항

색인 액세스 방법은 윈 토토의 동시 업데이트를 처리해야합니다. 여러 프로세스에 의해. 핵심postgresql시스템 획득accesssharelock윈 토토 스캔 중 윈 토토에서 그리고RowExClusivelock업데이트 할 때 색인 (일반 포함진공). 부터 이러한 잠금 유형은 충돌하지 않으며 액세스 방법은 책임이 있습니다. 세분화 된 잠금을 처리하려면 필요할 수 있습니다. 독점 윈 토토 전체를 고정하면 윈 토토 중에 만 취해집니다. 창조, 파괴 또는Reindex.

일반적으로 동시 업데이트를 지원하는 인덱스 유형 구축 필요한 행동에 대한 광범위하고 미묘한 분석이 필요합니다. B- 트리 및 해시 인덱스 유형의 경우 디자인에 대해 읽을 수 있습니다. 관련 결정src/backend/access/nbtree/readmeandsrc/backend/access/hash/readme.

지수 자체 내부 일관성 요구 사항 외에 동시 업데이트는 부모 테이블 () 및 윈 토토. 왜냐하면postgresql분리 인덱스의 힙에 대한 액세스 및 업데이트는 인덱스가 힙과 일치하지 않을 수있는 창. 우리 다음 규칙 으로이 문제를 처리하십시오.

  • 윈 토토 항목을 작성하기 전에 새 힙 입력이 이루어집니다. (따라서 동시 윈 토토 스캔은 힙 입력. 윈 토토 리더가 있기 때문에 괜찮습니다 어쨌든 커밋되지 않은 줄에 관심이 없습니다. 하지만 참조섹션 54.5.)

  • 힙 입력을 삭제할 때 (진공), 모든 윈 토토 항목을 제거해야합니다 첫 번째.

  • 윈 토토 스캔은 윈 토토 페이지에서 핀을 유지해야합니다. 마지막으로 반환 된 항목amgettupleAmbulkdelete항목을 삭제할 수 없습니다 다른 백엔드에 의해 고정 된 페이지에서. 이것에 대한 필요성 규칙은 아래에 설명되어 있습니다.

세 번째 규칙이 없으면 윈 토토 리더가 가능합니다. 색인 항목이 제거되기 직전을 확인하십시오.진공그리고 해당 힙에 도착합니다 그 후 진입은에 의해 제거되었습니다.진공. 해당 항목 번호가 여전히 있으면 심각한 문제가 발생하지 않습니다. 빈 항목 슬롯이 무시heap_fetch (). 그러나 만약 세 번째 백엔드는 이미 항목 슬롯을 재사용했습니다. 또 다른? MVCC 호환 스냅 샷을 사용하는 경우 문제가 없습니다 슬롯의 새로운 탑승자가 너무 새로워지기 때문에 스냅 샷 테스트를 통과하십시오. 그러나 비 MVCC 호환 스냅 샷으로 (와 같은SnapshotNow) 실제로 일치하지 않는 행을 수락하고 반환 할 수 있습니다. 스캔 키. 우리는이 시나리오를 요구함으로써 방어 할 수 있습니다 모든 경우에 힙 행에 재확인 할 키를 스캔하지만 너무 비싸다. 대신, 우리는 윈 토토 페이지의 핀을 독자가 여전히있을 수 있음을 나타내는 프록시"비행 중"윈 토토 항목에서 일치까지 힙 입력. 만들기Ambulkdelete블록 그러한 핀에서진공할 수 없습니다 독자가 끝나기 전에 힙 항목을 삭제하십시오. 이것 솔루션은 실행 시간이 거의 들지 않으며 오버 헤드 차단 만 추가합니다. 실제로 갈등이있는 드문 경우.

이 솔루션은 윈 토토 스캔이 필요합니다"동기": 각 힙 튜플을 가져와야합니다 해당 윈 토토 항목을 스캔 한 직후. 이것은 여러 가지 이유로 비싸다."비동기"많은 TID를 수집하는 스캔 지수에서, 나중에 힙 튜플 만 방문하십시오. 윈 토토 잠금 오버 헤드가 훨씬 적고 더 많은 것을 허용 할 수 있습니다. 효율적인 힙 액세스 패턴. 위의 분석에 따라 사용해야합니다 비 MVCC 호환 스냅 샷에 대한 동기식 접근 방식이지만 an 비동기 스캔은 MVCC를 사용하여 쿼리를 위해 작동합니다. 스냅 사진.

inAmgetBitMap윈 토토 스캔, the 액세스 방법은 반환 된 곳에서 윈 토토 핀을 유지하지 않습니다. 튜플. 따라서 그러한 스캔을 사용하는 것이 안전합니다. MVCC 호환 스냅 샷.

언제ampredlocks플래그는 아닙니다 세트, 직렬화 가능한 인덱스 액세스 방법을 사용하여 스캔 트랜잭션은 전체적으로 비 차단 술어 잠금 장치를 얻습니다. 색인. 이것은 동시 직렬화 가능한 트랜잭션에 의해 해당 지수에 대한 튜플. 읽기 쓰기 충돌의 특정 패턴이 일련의 동시 직렬화 가능한 트랜잭션, 그 중 하나 데이터 무결성을 보호하기 위해 거래가 취소 될 수 있습니다. 언제 플래그가 설정되어 있으며 인덱스 액세스 방법이 구현되었음을 나타냅니다. 더 미세한 술어 잠금 장치 그러한 거래 취소의 빈도.