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

55.4. 색인 잠금 고려 사항

색인 액세스 방법은 여러 프로세스로 윈 토토의 동시 업데이트를 처리해야합니다. 핵심PostgreSQL시스템 획득accesssharelock윈 토토 스캔 중 윈 토토에서rowexclusivelock윈 토토를 업데이트 할 때 (일반진공). 이러한 잠금 유형은 충돌하지 않기 때문에 액세스 방법은 필요한 미세한 잠금을 처리하는 데 도움이됩니다. 색인 전체에 대한 독점 잠금 장치는 색인 생성, 파괴 또는 중에 만 취해집니다.Reindex.

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

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

  • 윈 토토 항목을 작성하기 전에 새 힙 입력이 이루어집니다. (따라서 동시 윈 토토 스캔은 힙 항목을 보지 못할 가능성이 높습니다. 어쨌든 윈 토토 리더가 무관심하지 않기 때문에 괜찮습니다. 그러나 참조 참조.PostgreSQL : 문서 : 9.4 : 색인 토토 결과 확인.)

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

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

세 번째 규칙이 없으면 윈 토토 리더가 윈 토토 항목이 제거되기 직전에 윈 토토 항목을 볼 수 있습니다.진공진공. 독자가 도달 할 때 해당 항목 번호가 여전히 사용되지 않는 경우 심각한 문제가 발생하지 않습니다. 빈 항목 슬롯은 무시되므로heap_fetch (). 그러나 세 번째 백엔드가 이미 다른 것에 대한 항목 슬롯을 재사용했다면 어떨까요? MVCC 호환 스냅 샷을 사용하는 경우 슬롯의 새로운 탑승자가 스냅 샷 테스트를 통과하기에는 너무 새로워지기 때문에 문제가 없습니다. 그러나 MVCC 호환 스냅 샷 (예 :Snapshotany), 실제로 스캔 키와 일치하지 않는 행을 수락하고 반환 할 수 있습니다. 우리는 모든 경우에 스캔 키를 힙으로 다시 확인하도록 하여이 시나리오를 방어 할 수 있지만 너무 비쌉니다. 대신, 우리는 윈 토토 페이지의 핀을 프록시로 사용하여 독자가 여전히임을 나타냅니다."비행 중"윈 토토 항목에서 일치하는 힙 항목까지. 만들기Ambulkdelete그러한 핀의 블록진공독자가 완료되기 전에 힙 항목을 삭제할 수 없습니다. 이 솔루션은 런타임이 거의 들지 않으며 실제로 충돌이있는 드문 경우에만 오버 헤드 차단을 추가합니다.

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

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

언제ampredlocks플래그가 설정되지 않았으며, 직렬화 가능한 트랜잭션 내에서 해당 윈 토토 액세스 방법을 사용하는 스캔은 전체 윈 토토에서 비 차단 술어 잠금 장치를 획득합니다. 이로 인해 동시 직렬화 가능한 트랜잭션에 의해 튜플의 삽입물과 해당 지수에 삽입 된 읽기 낭비 충돌이 생성됩니다. 일련의 일련의 직렬화 가능한 트랜잭션에서 특정 패턴의 읽기 제기 충돌이 감지되면, 데이터 무결성을 보호하기 위해 해당 트랜잭션 중 하나가 취소 될 수 있습니다. 플래그가 설정되면 윈 토토 액세스 방법이 미세한 입자 술어 잠금을 구현하여 이러한 트랜잭션 취소의 빈도를 줄이는 경향이 있습니다..