각 작업자는 계획의 토토 꽁 머니 부분을 완료하기 때문에 실행하기 때문에 단순히 일반 쿼리 계획을 사용하여 여러 작업자를 사용하여 실행하는 것은 불가능합니다. 각 작업자는 출력 결과 집합의 전체 복사본을 생성하므로 쿼리가 평소보다 빠르게 실행되지는 않지만 잘못된 결과가 생성됩니다. 대신, 계획의 토토 꽁 머니 부분은 쿼리 최적화 프로그램에 내부적으로 알려진 것이어야 합니다.부분 계획; 즉, 필요한 각 출력 행이 정확히 하나의 협력 프로세스에 의해 생성되도록 보장되는 방식으로 계획을 실행하는 각 프로세스가 출력 행의 하위 집합만 생성하도록 구성되어야 합니다. 일반적으로 이는 쿼리의 구동 테이블에 대한 스캔이 토토 꽁 머니 인식 스캔이어야 함을 의미합니다.
현재 다음 유형의 병렬 인식 테이블 스캔이 지원됩니다.
에서토토 꽁 머니 순차 스캔, 테이블의 블록은 협력 프로세스 간에 나누어집니다. 블록은 한 번에 하나씩 전달되므로 테이블에 대한 액세스는 순차적으로 유지됩니다.
에토토 꽁 머니 비트맵 힙 스캔, 하나의 프로세스가 리더로 선택됩니다. 해당 프로세스는 하나 이상의 인덱스를 스캔하고 방문해야 할 테이블 블록을 나타내는 비트맵을 작성합니다. 그런 다음 이러한 블록은 토토 꽁 머니 순차 스캔처럼 협력 프로세스 간에 분할됩니다. 즉, 힙 스캔은 병렬로 수행되지만 기본 인덱스 스캔은 병렬로 수행되지 않습니다.
에토토 꽁 머니 인덱스 스캔또는토토 꽁 머니 인덱스 전용 스캔, 협력 프로세스가 차례로 인덱스에서 데이터를 읽습니다. 현재 토토 꽁 머니 인덱스 스캔은 btree 인덱스에 대해서만 지원됩니다. 각 프로세스는 단일 인덱스 블록을 요청하고 해당 블록이 참조하는 모든 튜플을 스캔하고 반환합니다. 다른 프로세스는 동시에 다른 인덱스 블록에서 튜플을 반환할 수 있습니다. 병렬 btree 스캔의 결과는 각 작업자 프로세스 내에서 정렬된 순서로 반환됩니다.
Btree가 아닌 인덱스 스캔과 같은 다른 스캔 유형은 향후 병렬 스캔을 지원할 수 있습니다.
비병렬 계획에서와 마찬가지로 구동 테이블은 중첩 루프, 해시 조인 또는 병합 조인을 사용하여 하나 이상의 다른 테이블에 조인될 수 있습니다. 조인의 내부 측면은 병렬 작업자 내에서 실행하는 것이 안전한 경우 플래너가 지원하는 모든 종류의 비병렬 계획일 수 있습니다. 예를 들어 중첩 루프 조인을 선택한 경우 내부 계획은 조인의 외부 측면에서 가져온 값을 조회하는 인덱스 스캔일 수 있습니다.
각 작업자는 조인의 내부 측면을 완전히 실행합니다. 이는 일반적으로 중첩 루프에서는 문제가 되지 않지만 해시 또는 병합 조인과 관련된 경우에는 비효율적일 수 있습니다. 예를 들어, 해시 조인의 경우 이 제한은 동일한 해시 테이블이 각 작업자 프로세스에 작성됨을 의미합니다. 이는 작은 테이블에 대한 조인에는 잘 작동하지만 내부 테이블이 큰 경우에는 효율적이지 않을 수 있습니다. 병합 조인의 경우 각 작업자가 별도의 내부 관계 정렬을 수행하므로 속도가 느려질 수 있습니다. 물론 이러한 유형의 병렬 계획이 비효율적인 경우 쿼리 플래너는 일반적으로 대신 다른 계획(병렬 처리를 사용하지 않는 계획)을 선택합니다.
포스트그레SQL2단계로 집계하여 병렬 집계를 지원합니다. 먼저 쿼리의 병렬 부분에 참여하는 각 프로세스는 집계 단계를 수행하여 해당 프로세스가 인식하는 각 그룹에 대한 부분 결과를 생성합니다. 이는 계획에 다음과 같이 반영됩니다.부분 집계노드. 둘째, 부분 결과는 다음을 통해 리더에게 전송됩니다.집결또는집합 병합. 마지막으로 리더는 최종 결과를 생성하기 위해 모든 작업자의 결과를 다시 집계합니다. 이는 계획에 다음과 같이 반영됩니다.집계 완료노드.
왜냐하면집계 완료노드는 리더 프로세스에서 실행되므로 입력 행 수에 비해 상대적으로 많은 수의 그룹을 생성하는 쿼리는 쿼리 플래너에 덜 선호되는 것으로 나타납니다. 예를 들어 최악의 시나리오에서는 다음과 같은 그룹 수가 표시됩니다.집계 완료노드는 다음의 모든 작업자 프로세스에서 본 입력 행 수만큼 많을 수 있습니다.부분 집계단계. 이러한 경우 병렬 집계를 사용해도 성능상 이점이 전혀 없습니다. 쿼리 플래너는 계획 프로세스 중에 이를 고려하므로 이 시나리오에서는 병렬 집계를 선택하지 않을 것입니다.
병렬 집계는 모든 상황에서 지원되지 않습니다. 각 집계는 다음과 같아야 합니다.PostgreSQL : 문서 : 10 : 15.4. 와이즈 토토 안전병렬 처리를 위해 결합 기능이 있어야 합니다. 집계에 다음 유형의 전환 상태가 있는 경우내부, 직렬화 및 역직렬화 기능이 있어야 합니다. 참조집합 생성자세한 내용을 확인하세요. 집계 함수 호출에 다음이 포함된 경우 병렬 집계가 지원되지 않습니다.독특또는주문 기준절은 순서가 지정된 집합 집계 또는 쿼리에 포함된 경우에도 지원되지 않습니다.그룹화 세트. 쿼리에 관련된 모든 조인이 계획의 토토 꽁 머니 부분에도 포함되는 경우에만 사용할 수 있습니다.
그렇게 할 것으로 예상되는 쿼리가 토토 꽁 머니 계획을 생성하지 않으면 축소를 시도해 볼 수 있습니다.parallel_setup_cost또는parallel_tuple_cost. 물론, 이 계획은 기획자가 선호한 직렬 계획보다 느릴 수도 있지만 항상 그런 것은 아닙니다. 이러한 설정 값이 매우 작아도(예: 둘 다 0으로 설정한 후) 토토 꽁 머니 계획을 얻지 못하는 경우 쿼리 플래너가 쿼리에 대한 토토 꽁 머니 계획을 생성할 수 없는 이유가 있을 수 있습니다. 보다PostgreSQL : 문서 : 10 : 15.2. 병렬 범퍼카 토토를 언제 사용할 수 있습니까?그리고PostgreSQL : 문서 : 10 : 15.4. 와이즈 토토 안전이러한 이유에 대한 정보를 확인하세요.
병렬 계획을 실행할 때 다음을 사용할 수 있습니다.설명(분석, 자세한 설명)각 계획 노드에 대한 작업자별 통계를 표시합니다. 이는 작업이 모든 계획 노드 간에 균등하게 분배되는지 확인하고 더 일반적으로 계획의 성능 특성을 이해하는 데 유용할 수 있습니다.