FDW의 기본 스토리지 메커니즘에 해당 행의 동시 업데이트를 방지하기 위해 개별 행을 잠그는 개념이 있다면, FDW가 일반적으로 평범한상에서 사용되는 중심에 근사치를 사용하여 줄 수준 윈 토토을 수행하는 것이 일반적으로PostgreSQL테이블. 이에 관련된 여러 고려 사항이 있습니다.
한 가지 중요한 결정은 수행 여부입니다.조기 윈 토토또는늦은 윈 토토. 초기 잠금시, 기저 스토어에서 처음 검색 될 때 행이 잠겨 있으며, 늦게 잠금하시면 행은 잠겨 있어야한다고 알려진 경우에만 잠겨 있습니다. (일부 행은 로컬로 점검 한 제한 또는 조건에 의해 폐기 될 수 있기 때문에 차이가 발생합니다.) 조기 윈 토토은 훨씬 간단하고 원격 상점으로의 추가 회전 트립을 피하지만 잠금 할 필요가없는 행을 잠금으로써 동시성을 줄이거 나 예기치 않은 교착 상태를 감소시킬 수 있습니다. 또한, 잠금 할 행을 나중에 고유하게 식별 할 수있는 경우에만 늦은 윈 토토이 가능합니다. 바람직하게는 행 식별자가 특정 버전의 행을 식별해야합니다.PostgreSQLTIDS DO.
기본적으로PostgreSQLFDW와 인터페이스 할 때 잠금 고려 사항을 무시하지만 FDW는 핵심 코드의 명시 적 지원없이 조기 윈 토토을 수행 할 수 있습니다. API 기능에 설명 된섹션 59.2.6PostgreSQL9.5, FDW가 원하는 경우 늦은 윈 토토을 사용하도록 허용합니다.
추가 고려 사항은입니다.Commited 읽기
격리 모드,postgresql일부 대상 튜플의 업데이트 된 버전에 대해 제한을 다시 확인하고 조건을 조정해야 할 수도 있습니다. 조정 조건을 다시 확인하려면 이전에 대상 튜플에 결합 된 비 표적 행의 사본을 다시 찾아야합니다. 표준으로 작업 할 때PostgreSQL테이블, 이것은 조인을 통해 투사 된 열 목록에 비 표적 테이블의 TID를 포함시킨 다음 필요할 때 비 표적 행을 다시 가져와서 수행합니다. 이 접근법은 조인 데이터 세트를 컴팩트하게 유지하지만 저렴한 리 페치 기능과 다시 가져올 행 버전을 고유하게 식별 할 수있는 TID가 필요합니다. 따라서 기본적으로 외국 테이블에 사용 된 접근 방식은 조인을 통해 투사 된 열 목록에 외국 테이블에서 가져온 전체 행의 사본을 포함시키는 것입니다. 이로 인해 FDW에 대한 특별한 요구는 없지만 병합 및 해시 조인의 성능이 줄어들 수 있습니다. 재 포장 요구 사항을 충족시킬 수있는 FDW는 첫 번째 방법으로이를 선택할 수 있습니다.
for업데이트
또는삭제
외국 테이블에서 권장됩니다.Foreignscan
대상 테이블에서의 작동은 아마도 등가를 통해 가져 오는 행에서 조기 윈 토토을 수행합니다업데이트 선택
. FDW는 테이블이인지 여부를 감지 할 수 있습니다.업데이트
/삭제
릴리스를 비교하여 계획 시간에 대상root- parse- ressultrelation
또는 사용하여 실행 시간에execrelationistArgetRelation ()
. 대안 가능성은 내에서 늦게 윈 토토을 수행하는 것입니다.execforeignupdate
또는execforeigndelete
콜백이지만 이에 대한 특별한 지원은 제공되지 않습니다.
a에 의해 지정된 외국 테이블의 경우업데이트/공유 선택
명령,Foreignscan
작업에 해당하는 튜플을 가져 와서 조작을 다시 수행 할 수 있습니다업데이트/공유 선택
. 대신 늦게 윈 토토을 수행하려면에 정의 된 콜백 함수를 제공합니다.섹션 59.2.6. 안에getforeignrowmarktype
, Rowmark 옵션 선택ROW_MARK_EXCLUSIC
, ROW_MARK_NOKEYEXCLUSIC
, row_mark_share
또는row_mark_keyshare
요청 된 윈 토토 강도에 따라. (핵심 코드는 당신이 선택한이 네 가지 옵션 중 어느 쪽을 선택하든 동일하게 작동합니다.) 다른 곳에서는 |get_plan_rowmark
계획 시간 또는execfindrowmark
실행 시간에; Null Rowmark Struct가 반환되는지 여부를 확인해야합니다.강도
필드는LCS_NONE
.
마지막으로, AN에서 사용되는 외국 테이블의 경우업데이트
, 삭제
또는업데이트/공유 선택
명령이지만 행으로 지정되지 않으면 기본 선택을 무시하여 전체 행을 복사하여getforeignrowmarkType
선택 옵션row_mark_reference
잠금 강도를 볼 때LCS_NONE
. 이로 인해Refetchforeignrow
그 값으로 호출 될MarkType
; 그런 다음 새로운 윈 토토 장치를 얻지 않고 행을 다시 가져와야합니다. (getforeignrowmarktype
함수이지만 윈 토토 해제 행을 다시 가져오고 싶지 않습니다. 옵션row_mark_copy
forLCS_NONE
.)
참조src/include/nodes/lockoptions.h
,RowmarkType
andPlanrowmark
insrc/include/nodes/plannodes.h
, 그리고execrowmark
insrc/include/nodes/execnodes.h
추가 정보는
15896_16122이 양식문서 문제를보고하려면