Postgresql 9.0.23 문서화 | ||||
---|---|---|---|---|
PostgreSQL : 문서 : 9.0 : 인덱스 스포츠 토토 사이트 | up | 51 장. 색인 액세스 방법 인터페이스 정의 | 토토 베이 : 문서 : 9.0 : 색인 고유성 확인 |
색인 액세스 방법은 동시 업데이트를 처리해야합니다 여러 프로세스로 색인. 핵심PostgreSQL시스템 획득accesssharelock토토 꽁 머니 스캔 중 토토 꽁 머니에서 그리고RowExClusivelock업데이트 할 때 색인 (일반 포함진공). 부터 이러한 잠금 유형은 충돌하지 않으며 액세스 방법은 다음과 같습니다. 필요한 미세한 잠금을 처리 할 책임이 있습니다. 전체적으로 인덱스에 대한 독점 잠금은 색인 생성, 파괴 또는Reindex.
동시 업데이트를 지원하는 인덱스 유형 구축 일반적으로 필요한 것을 광범위하고 미묘한 분석이 필요합니다 행동. B- 트리 및 해시 인덱스 유형의 경우 읽을 수 있습니다. 관련된 디자인 결정src/backend/access/nbtree/readmeandsrc/backend/access/hash/readme.
지수 자체 내부 일관성 요구 사항 외에 동시 업데이트는 부모 테이블 (힙) 및 토토 꽁 머니. 왜냐하면PostgreSQL분리 인덱스의 힙에 대한 액세스 및 업데이트 인덱스가 더미. 우리는 다음 규칙 으로이 문제를 처리합니다.
토토 꽁 머니 항목을 작성하기 전에 새 힙 입력이 이루어집니다. (따라서 동시 토토 꽁 머니 스캔이 보지 못할 가능성이 높습니다. 힙 입구. 토토 꽁 머니 리더가 원하기 때문에 괜찮습니다 어쨌든 커밋되지 않은 줄에 관심이 없습니다. 하지만 참조토토 베이 : 문서 : 9.0 : 색인 고유성 확인.)
힙 입력을 삭제할 때 (진공), 모든 토토 꽁 머니 항목을 제거해야합니다 첫 번째.
토토 꽁 머니 스캔은 토토 꽁 머니 페이지에서 핀을 유지해야합니다.
마지막으로 반환 된 품목을 |amgettuple
및Ambulkdelete
항목을 삭제할 수 없습니다
다른 백엔드에 의해 고정 된 페이지. 이것에 대한 필요성
규칙은 아래에 설명되어 있습니다.
세 번째 규칙이 없으면 토토 꽁 머니 리더가 가능합니다.
색인 항목이 제거되기 직전을 확인하십시오.진공그 후 힙 입력은에 의해 제거되었습니다.진공. 그렇다면 심각한 문제가 발생하지 않습니다
항목 번호는 독자가 도달 할 때 여전히 사용하지 않습니다.
빈 항목 슬롯은에 의해 무시됩니다heap_fetch ()
. 그러나 세 번째 백엔드가 있다면 어떨까요?
이미 다른 것에 대한 항목 슬롯을 재사용 했습니까? AN을 사용할 때
MVCC 호환 스냅 샷, 새로운 것이기 때문에 아무런 문제가 없습니다
슬롯의 탑승자는
스냅 샷 테스트. 그러나 비 MVCC 호환 스냅 샷 (예 :
처럼SnapshotNow) 가능합니다
실제로 스캔과 일치하지 않는 행을 수락하고 반환합니다.
열쇠. 스캔을 요구 하여이 시나리오로부터 방어 할 수 있습니다.
모든 경우에 힙으로 다시 확인해야하지만
너무 비싸다. 대신, 우리는 토토 꽁 머니 페이지의 핀을
독자가 여전히있을 수 있음을 나타내는 프록시"비행 중"토토 꽁 머니 항목에서 일치까지
힙 입력. 만들기Ambulkdelete
그러한 핀의 블록진공독자가 완료되기 전에 힙 항목을 삭제할 수 없습니다.
이 솔루션은 런타임이 거의 들지 않으며 차단을 추가합니다.
실제로있는 드문 경우에만 오버 헤드
갈등.
이 솔루션은 토토 꽁 머니 스캔이 필요합니다"동기": 각 힙 튜플을 가져와야합니다 해당 토토 꽁 머니 항목을 스캔 한 직후. 이것은 여러 가지 이유로 비싸다."비동기"많은 TID를 수집하는 스캔 지수에서, 나중에 힙 튜플 만 방문하십시오. 토토 꽁 머니 잠금 오버 헤드가 훨씬 적고 더 많은 것을 허용 할 수 있습니다. 효율적인 힙 액세스 패턴. 위의 분석에 따라 우리는해야합니다 비 MVCC 호환 스냅 샷에 동기식 접근법을 사용하십시오. 그러나 비동기 스캔은 MVCC를 사용하여 쿼리를 위해 작동합니다. 스냅 사진.
inAmgetBitMap
색인 스캔,
액세스 방법은
반환 튜플. 따라서 그러한 스캔을 사용하는 것이 안전합니다.
MVCC 호환 스냅 샷.