윈 토토 : 문서 : 9.4 : 윈 토토 | |||
---|---|---|---|
PostgreSQL : 문서 : 9.4 : 토토 커뮤니티 데이터 래퍼 도우미 기능 | PostgreSQL : 문서 : 9.4 : 외국 토토 꽁 머니 래퍼 쓰기 | 53 장. 외국 데이터 래퍼 쓰기 | PostgreSQL : 문서 : 9.4 : 유전자 사설 토토 사이트 옵티마이저 |
FDW 콜백 함수getforeignRelsize
, getforeignpaths
, getforeignplan
및PlanforeignModify
의 작업에 맞아야합니다PostgreSQL플래너. 다음은해야 할 일에 대한 몇 가지 메모입니다.
정보루트및Baserel외국 표에서 가져와야하는 정보의 양을 줄이고 비용을 줄일 수 있습니다.Baserel- Baserestrictinfo제한이 포함되어 있기 때문에 특히 흥미 롭습니다 (여기서Clauses)를 가져올 행을 필터링하는 데 사용해야합니다. (핵심 집행자가 대신 확인할 수 있으므로 FDW 자체는 이러한 quals를 시행 할 필요가 없습니다.)Baserel- reltargetList어떤 열을 가져와야하는지 결정하는 데 사용될 수 있습니다. 그러나 그것은에 의해 방출 해야하는 열만 나열합니다.Foreignscan와이즈 토토 노드, Qual Evaluation에서 사용되지만 쿼리에서 출력하지 않는 열이 아닌 노드..
FDW 계획 기능에 정보를 유지하기 위해 다양한 개인 필드를 사용할 수 있습니다. 일반적으로 FDW 개인 필드에 저장하는 것은 Palloc'd이어야하므로 계획이 끝날 때 되 찾을 수 있습니다..
Baserel- fdw_privateisvoidFDW 계획 기능이 특정 외국 테이블과 관련된 정보를 저장할 수있는 포인터. 핵심 플래너는을 초기화하는 것을 제외하고는 그것을 만지지 않습니다.Baserel노드가 생성되었습니다. 정보를 전달하는 데 유용합니다getforeignRelsize
togetforeignpaths
및/또는getforeignpaths
togetforeignplan
, 따라서 재 계산을 피하십시오.
getforeignpaths
개인 정보를 저장하여 다른 액세스 경로의 의미를 식별 할 수 있습니다fdw_private필드외국 경로노드.FDW_PRIVATE|List포인터이지만 핵심 플래너가 터치하지 않기 때문에 실제로 아무것도 포함 할 수 있습니다. 그러나 모범 사례는 |Nodetostring
, 백엔드에서 사용 가능한 디버깅 지원과 함께 사용하려면
getforeignplan
를 검사 할 수 있습니다FDW_PRIVATE선택한 필드외국 경로노드 및 생성fdw_exprsandFDW_PRIVATE에 배치 할 목록Foreignscan실행 시간에 사용할 수있는 계획 노드. 이 두 목록은 형식으로 표시되어야합니다.CopyObject
복사 방법을 알고 있습니다. 그만큼fdw_private목록에는 다른 제한이 없으며 핵심 백엔드에 의해 어떤 식 으로든 해석되지 않습니다. 그만큼FDW_EXPRS목록은 런 타임에 실행되도록 의도 된 표현 트리를 포함 할 것으로 예상됩니다. 이 나무들은 플래너에 의해 사후 처리를 겪게되어 완전히 실행 가능하게 만들 것입니다.
ingetforeignplan
, 일반적으로 전달 된 대상 목록은 와이즈 토토 노드에 복사 할 수 있습니다. 통과Scan_Clauses목록은와 동일한 조항을 포함합니다Baserel- Baserestrictinfo이지만 더 나은 실행 효율성을 위해 다시 주문할 수 있습니다. 간단한 경우 FDW가 스트라이프 할 수 있습니다thegrictinfoScan_Clauses목록 (사용Extrac_Actual_Clauses
) 모든 조항을 플랜 노드의 Qual 목록에 넣습니다. 즉, 모든 조항이 실행 시간에 집행자가 점검하게됩니다. 더 복잡한 FDW는 내부적으로 일부 조항을 확인할 수 있으며,이 경우 해당 조항을 플랜 노드의 Qual List에서 제거하여 집행자가 시간을 다시 확인하는 데 시간을 낭비하지 않도록 할 수 있습니다..
예를 들어, FDW는 양식의 일부 제한 조항을 식별 할 수 있습니다외국_variable = sub_expression, 로컬로 평가 된 값이 주어지면 원격 서버에서 실행될 수 있다고 결정합니다.sub_expression. 그러한 조항의 실제 식별은 동안 발생해야합니다.getforeignpaths
, 경로의 비용 추정치에 영향을 미치기 때문입니다. 경로FDW_PRIVATE필드는 아마도 식별 된 절에 대한 포인터를 포함 할 것입니다thegrictinfo노드. 그 다음에getforeignplan
해당 조항을 제거 할 것입니다scan_clauses하지만 추가sub_expressiontoFDW_EXPRS그것이 실행 가능한 형태로 마사지되도록합니다. 아마도 계획 노드에 제어 정보를 넣을 것입니다FDW_PRIVATE실행 기능에 실행 시간에해야 할 일을 알리는 필드. 원격 서버로 전송 된 쿼리에는와 같은 것이 포함됩니다.여기서외국_variable= $ 1FDW_EXPRS발현 트리.
FDW는 항상 테이블의 제한 조항에만 의존하는 경로를 항상 구성해야합니다. 조인 쿼리에서는 조인 조항에 의존하는 경로를 구성하도록 선택할 수도 있습니다.외국_variable = local_variable. 그러한 조항은 찾을 수 없습니다Baserel- Baserestrictinfo그러나 관계의 조인 목록에서 찾아야합니다. 그러한 조항을 사용하는 경로를 A라고합니다."매개 변수 경로". 선택한 조인 절에 사용 된 다른 관계를 적절한 값으로 식별해야합니다.param_info; 사용get_baserel_parampathinfo
해당 값을 계산합니다. 안에getforeignplan
, Thelocal_variable조인 절 부분이 추가됩니다FDW_EXPRS
와이즈 토토 할 때업데이트또는삭제, planforeignModify
|repiptinfo외국 테이블의 구조 및 사용Baserel- fdw_private스캔 계획 기능에 의해 이전에 생성 된 데이터. 그러나에서삽입대상 테이블이 스캔되지 않으므로 아니요repoptinfo그것을 위해. 그만큼List반환planforeignModify
fdw_privateA 목록Foreignscan와이즈 토토 노드, 즉 구조 만 포함해야합니다.CopyObject
복사 방법을 알고 있습니다.
for업데이트또는삭제동시 업데이트를 지원하는 외부 데이터 소스에 대해OutissscanOperation은 아마도 등가를 통해 가져 오는 행을 잠그십시오업데이트 선택. FDW는 외국 테이블이 a에 참조 될 때 Fetch Time에서 행을 잠그도록 선택할 수도 있습니다.업데이트/공유 선택; 그렇지 않다면업데이트또는공유옵션은 기본 테이블에 관한 한 본질적으로 NO-OP입니다. 이 동작은 로컬 테이블의 작업과 약간 다른 의미를 생성 할 수 있습니다. 로컬 테이블의 작업과 약간 다를 수 있습니다. 여기서 행 잠금이 가능한 한 오랫동안 지연됩니다. 그 후에 원격 행이 로컬로 적용 된 제한이나 조건에 가입하더라도 원격 행이 잠겨질 수 있습니다. 그러나 로컬 의미론을 정확히 일치시키기 위해서는 모든 행에 대한 추가 원격 액세스가 필요하며 외부 데이터 소스가 제공하는 잠금 시맨틱에 따라 불가능할 수 있습니다.
PostgreSQL : 문서 : 9.4 : 토토 커뮤니티 데이터 래퍼 도우미 기능 | 윈 토토 : 문서 : 9.4 : 윈 토토 9.4.26 문서화 | PostgreSQL : 문서 : 9.4 : 유전자 사설 토토 사이트 옵티마이저 |
외국 데이터 포장지 도우미 기능 | PostgreSQL : 문서 : 9.4 : 외국 토토 꽁 머니 래퍼 쓰기 | Genetic Query Optimizer |