각 작업자는 완료 계획의 윈 토토 부분을 실행하기 때문에 단순히 일반 쿼리 계획을 세우고 여러 근로자를 사용하여 실행할 수 없습니다. 각 작업자는 출력 결과 세트의 전체 사본을 생성하므로 쿼리는 정상보다 빠르게 실행되지 않지만 잘못된 결과를 생성합니다.부분 계획; 즉, 계획을 실행하는 각 프로세스는 각각의 필요한 출력 행이 정확히 하나의 협력 프로세스 중 하나에 의해 생성되도록 보장되는 방식으로 출력 행의 서브 세트 만 생성하도록 구성되어야합니다.
다음 유형의 병렬 인식 테이블 스캔이 현재 지원되고 있습니다.
at윈 토토 순차적 스캔, 테이블의 블록은 범위로 나뉘어 협력 프로세스 사이에서 공유됩니다. 각 작업자 프로세스는 추가 범위의 블록을 요청하기 전에 주어진 블록 범위의 스캔을 완료합니다.
at윈 토토 비트 맵 힙 스캔, 하나의 프로세스가 리더로 선택됩니다. 이 프로세스는 하나 이상의 인덱스를 스캔하고 방문 해야하는 테이블 블록을 나타내는 비트 맵을 작성합니다.
at윈 토토 인덱스 스캔또는윈 토토 인덱스 전용 스캔, 협력 프로세스는 인덱스에서 데이터를 읽습니다. 현재 윈 토토 인덱스 스캔은 BTREE 인덱스에 대해서만 지원됩니다.
비트 리 인덱스 스캔과 같은 다른 스캔 유형은 향후 병렬 스캔을 지원할 수 있습니다.
비 평행 계획에서와 마찬가지로, 구동 테이블은 중첩 루프, 해시 조인 또는 병합 조인을 사용하여 하나 이상의 다른 테이블과 결합 될 수 있습니다. Join의 안쪽은 평행 작업자 내에서 안전하다면 플래너가 뒷받침하는 모든 종류의 비 평행 계획 일 수 있습니다.
at중첩 루프 조인, 내부는 항상 평면이 아닌 것입니다. 외부 튜플과 인덱스에서 값을 찾는 루프가 협력 프로세스로 나뉘어지기 때문에 내부가 인덱스 스캔 인 경우 효율적입니다..
at합병 조인, 내부는 항상 비 평면 계획이므로 전체적으로 실행됩니다. 모든 협력 과정에서 작업과 결과 데이터가 복제되기 때문에 특히 정렬을 수행 해야하는 경우에는 비효율적 일 수 있습니다.
at해시 조인( "평행"접두사없이) 내부는 해시 테이블의 동일한 사본을 구축하기 위해 모든 협력 프로세스에 의해 전체적으로 실행됩니다. 해시 테이블이 크거나 계획이 비싸면 비효율적 일 수 있습니다.병렬 해시 조인, 내부는입니다.윈 토토 해시협력 프로세스를 통해 공유 해시 테이블을 구축하는 작업을 나누는 것은
postgresql두 단계로 집계하여 병렬 집계를 지원합니다. 먼저, 쿼리의 병렬 부분에 참여하는 각 프로세스는 집계 단계를 수행하여 해당 프로세스의 각 그룹에 대한 부분 결과를 생성합니다.부분 집계
노드. 둘째, 부분 결과는 경고를 통해 리더에게 전달됩니다.수집
또는합병 수집
. 마지막으로, 리더는 최종 결과를 생성하기 위해 모든 근로자의 결과를 다시 분리합니다.골재 마무리
노드.
왜냐하면골재 마무리
노드는 리더 프로세스에서 실행됩니다. 입력 행의 수와 비교하여 비교적 많은 그룹을 생성하는 쿼리는 쿼리 플래너에게 덜 유리하게 보입니다. 예를 들어, 최악의 시나리오에서가 보이는 그룹의 수골재 마무리
노드는의 모든 작업자 프로세스에서 볼 수있는 입력 행의 수만큼 많을 수 있습니다.부분 집계
무대. 그러한 경우, 윈 토토 집계를 사용하는 데는 성능 이점이 없을 것입니다.
병렬 집계가 모든 상황에서 지원되는 것은 아닙니다. 각 집계는이어야합니다.안전윈 토토 처리의 경우 조합 기능이 있어야합니다. 집계에 유형의 전이 상태가있는 경우내부
, 직렬화 및 사막화 기능이 있어야합니다. 보다집계 생성자세한 내용. 집계 함수 호출이 포함 된 경우 병렬 집계가 지원되지 않습니다별도의
또는주문 by
조항은 주문 세트 집계에 대해서도 지원되지 않거나 쿼리가 포함될 때그룹화 세트
. 쿼리에 관련된 모든 조인이 계획의 윈 토토 부분의 일부일 때만 사용할 수 있습니다.
언제든지postgresql여러 소스의 행을 단일 결과 세트로 결합해야합니다.부록
또는mergeappend
계획 노드. 이것은 일반적으로 구현할 때 발생합니다Union All
또는 파티션 된 테이블을 스캔 할 때. 이러한 노드는 다른 계획에서 가능한 것처럼 병렬 계획에서 사용할 수 있습니다.병렬 부록
노드.
언제부록
노드는 윈 토토 계획에 사용되며, 각 프로세스는 어린이 계획이 나타나는 순서대로 자식 계획을 실행하여 모든 참여 프로세스가 완료 될 때까지 첫 번째 아동 계획을 실행하기 위해 협력하여 동시에 두 번째 계획으로 이동합니다. A병렬 부록
대신에, 집행 인은 대신 참여 과정을 아동 계획에 대해 가능한 한 고르게 확산시켜 여러 아동 계획이 동시에 실행됩니다. 이것은 경합을 피하고 또한 그것을 실행하지 않는 프로세스에서 아동 계획의 스타트 업 비용을 지불하는 것을 피합니다..
또한 일반과 달리부록
노드, 윈 토토 계획 내에서 사용할 때만 부분 어린이를 가질 수있는 노드, a병렬 부록
노드는 부분적 및 비 임파 아동 계획을 모두 가질 수 있습니다. 비 진당 어린이는 단일 프로세스 만 스캔하여 스캔하면 한 번 이상 스캔하면 중복 결과가 생성되기 때문입니다.병렬 부록
정기인덱스 스캔
계획; 각 개별 지수 스캔은 단일 프로세스로 완료되도록 실행해야하지만 다른 프로세스로 동시에 다른 스캔을 수행 할 수 있습니다.
enable_parallel_append이 기능을 비활성화하는 데 사용할 수 있습니다.
그렇게 할 것으로 예상되는 쿼리가 윈 토토 계획을 생성하지 않으면 감소를 시도 할 수 있습니다parallel_setup_cost또는parallel_tuple_cost. 물론,이 계획은 플래너가 선호하는 일련의 계획보다 느리게 될 수 있지만, 항상 그런 것은 아닙니다.섹션 15.2및섹션 15.4이것이 왜 그런지에 대한 정보를 보려면.
윈 토토 계획을 실행할 때 사용할 수 있습니다설명 (분석, Verbose)
각 계획 노드에 대한 직원 당 통계를 표시합니다. 이것은 모든 계획 노드간에 작업이 균등하게 배포되는지 여부를 결정하는 데 유용 할 수 있으며보다 일반적으로 계획의 성능 특성을 이해하는 데 유용 할 수 있습니다.
문서에 맞지 않는 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면