Postgresql 9.2.24 문서화 | ||||
---|---|---|---|---|
이전 | up | 50 장. 외국 데이터 포장지 작성 | 메이저 토토 사이트 : 문서 : 9.2 : 유전자 쿼리 옵티마이저 |
FDW 콜백 함수getforeignRelsize
, getforeignpaths
및getforeignplan
의 작업에 적합해야합니다
그만큼PostgreSQL플래너. 여기에 있습니다
그들이해야 할 일에 대한 몇 가지 메모.
정보루트및Baserel양을 줄이는 데 사용할 수 있습니다 외국 테이블에서 가져와야하는 정보의 따라서 비용을 줄입니다).Baserel- Baserestrictinfo특히입니다 흥미롭게, 제한이 포함되어 있기 때문에 (여기서Clauses)를 필터링하는 데 사용해야합니다 가져 오는 행. (FDW 자체는 시행 할 필요가 없습니다 핵심 집행자가 대신 확인할 수 있듯이이 quals.)Baserel- reltargetList익숙해 질 수 있습니다 어떤 열을 가져와야하는지 결정하십시오. 그러나 그것은 단지 그것만 주목하십시오 에 의해 방출되어야하는 열을 나열합니다.Foreignscan열이 아닌 노드를 메이저 토토 사이트하십시오 Qual Evaluation에서 사용하지만 쿼리에서는 출력하지 않습니다.
FDW 계획에는 다양한 개인 필드를 사용할 수 있습니다 정보를 유지하는 기능. 일반적으로, 당신이 저장하는 모든 것에 FDW에서 개인 필드는 Palloc'd이어야하므로 계획이 끝날 때 재생.
Baserel- fdw_privateisvoidFDW에 사용할 수있는 포인터
관련 정보를 저장하기위한 계획 기능
특정 외국 테이블. 핵심 플래너는 그것을 만지지 않습니다
일 때 null로 초기화하는 것을 제외하고Baserel노드가 생성되었습니다. 통과하는 데 유용합니다
전달getforeignRelsize
togetforeignpaths
및/또는getforeignpaths
togetforeignplan
재 계산.
getforeignpaths
개인 정보를 저장하여 다른 액세스 경로의 의미
에서fdw_private필드외국 경로노드.fdw_private|List포인터이지만 실제로 무엇이든 포함 할 수 있습니다
핵심 플래너는 그것을 만지지 않기 때문에. 그러나 모범 사례
|Nodetostring
, 디버깅 지원과 함께 사용합니다
백엔드에서 사용할 수 있습니다.
getforeignplan
를 검사 할 수 있습니다fdw_private선택한 필드외국 경로노드 및 생성FDW_EXPRSandfdw_private에 배치 할 목록OutiseScan노드를 메이저 토토 사이트하십시오
실행 시간에 사용할 수 있습니다. 이 두 목록은 모두 있어야합니다
형식으로 표현CopyObject
복사 방법을 알고 있습니다. 그만큼fdw_private목록에는 다른 제한이 없습니다
핵심 백엔드에 의해 어떤 식 으로든 해석되지 않습니다. 그만큼FDW_EXPRS목록은 그렇지 않은 경우 예상됩니다
달리기시 실행하려는 표현 나무가 포함되어 있습니다.
시간. 이 나무들은 플래너에 의해 후 처리를 거칠 것입니다
완전히 실행할 수있게하십시오.
ingetforeignplan
, 일반적으로
전달 된 대상 목록은 메이저 토토 사이트 노드에 복사 할 수 있습니다. 그만큼
전달 된 scan_clauses 목록에는와 동일한 조항이 포함되어 있습니다.Baserel- Baserestrictinfo더 나은 실행 효율성을 위해 다시 주문했습니다. 간단한 경우
FDW는 그냥 스트립 할 수 있습니다thegrictinfo노드
scan_clauses 목록에서 (사용Extrac_Actual_Clauses
) 모든 조항을 넣습니다
Plan Node의 Qual 목록에
실행 시간에 집행자가 확인합니다. 더 복잡한 FDW
내부적으로 일부 조항을 확인할 수 있습니다.
사례 이러한 조항은 계획 노드의 Qual List에서 제거 할 수 있습니다.
실행자가 그들을 다시 생각하는 데 시간을 낭비하지 않도록합니다.
예를 들어, FDW는 일부 제한 조항을 식별 할 수 있습니다.
양식의외국_variable
= sub_expression는 결정할 수 있습니다
로컬로 평가 된 값이 주어지면 원격 서버에서 실행됩니다
의sub_expression. 실제
그러한 조항의 식별은 동안 발생해야합니다.getforeignpaths
비용에 영향을 미치기 때문입니다
경로에 대한 추정. 경로FDW_PRIVATE필드는 아마도 a를 포함 할 것입니다
식별 된 절에 대한 포인터thegrictinfo노드. 그 다음에getforeignplan
해당 조항을 제거합니다
scan_clauses이지만 추가sub_expressiontofdw_exprs마사지를 받으려면
실행 가능한 양식. 아마도 통제 정보를 넣을 수도 있습니다
계획 노드에FDW_PRIVATE실행 기능에 실행 시간에해야 할 일을 알리는 필드. 그만큼
원격 서버로 전송 된 쿼리에는 무언가가 포함됩니다
좋다여기서외국_variable= $ 1평가에서 실행 시간에 얻은 매개 변수 값FDW_EXPRS발현 트리.
FDW는 항상 적어도 하나의 경로를 구성해야합니다.
테이블의 제한 조항에만. 조인 쿼리에서
가입에 의존하는 경로를 구성하도록 선택할 수도 있습니다.
조항, 예를 들어외국_variable =
local_variable. 그러한 조항은 할 것입니다
에서 찾을 수 없습니다Baserel- Baserestrictinfo하지만 찾아야합니다
관계의 가입 목록. 그러한 조항을 사용하는 경로를 A라고합니다."매개 변수 경로". 식별해야합니다
선택된 조인 조항에 사용 된 다른 관계는
적절한 값param_info; 사용get_baserel_parampathinfo
to
그 값을 계산하십시오. 안에getforeignplan
, Thelocal_variable조인 절 부분
에 추가됩니다.FDW_EXPRS및
그런 다음 런타임에 케이스는 평범한 것과 동일하게 작동합니다.
제한 조항.