최적화 프로그램이 병렬 쿼리가 특정 쿼리에 대한 가장 빠른 실행 전략이라고 판단하면 다음을 포함하는 쿼리 계획을 생성합니다.집결또는집합 병합노드. 다음은 간단한 예입니다.
EXPLAIN SELECT * FROM pgbench_accounts WHERE 필러가 '%x%'';
쿼리 계획
------------------------------------------------------------------------
수집(비용=1000.00..217018.43행=1너비=97)
계획된 작업자: 2
- pgbench_accounts의 무지개 토토 시퀀스 스캔(비용=0.00..216018.33행=1너비=97)
필터: (필러 ~~ '%x%'::text)
(4행)
모든 경우에,집결또는집합 병합노드는 무지개 토토로 실행될 계획의 일부인 정확히 하나의 하위 계획을 갖습니다. 만약집결또는집합 병합노드가 계획 트리의 맨 위에 있으면 전체 쿼리가 무지개 토토로 실행됩니다. 계획 트리의 다른 곳에 있으면 그 아래 계획 부분만 무지개 토토로 실행됩니다. 위의 예에서 쿼리는 하나의 테이블에만 액세스하므로 이외의 계획 노드는 하나뿐입니다.집결노드 자체; 해당 계획 노드는의 하위 노드이므로집결노드, 무지개 토토로 실행됩니다.
PostgreSQL : 문서 : 11 : 14.1. 토토 결과 사용, 플래너가 선택한 작업자 수를 확인할 수 있습니다. 때집결쿼리 실행 중에 노드에 도달하면 사용자 세션을 구현하는 프로세스가 여러 가지를 요청합니다PostgreSQL : 문서계획자가 선택한 작업자 수와 같습니다. 플래너가 사용을 고려할 백그라운드 작업자 수는 최대로 제한됩니다.max_parallel_workers_per_gather. 동시에 존재할 수 있는 총 백그라운드 작업자 수는 두 가지 모두에 의해 제한됩니다.max_worker_processes그리고max_parallel_workers. 따라서 계획보다 적은 수의 작업자를 사용하거나 작업자가 전혀 없는 경우에도 무지개 토토 쿼리를 실행할 수 있습니다. 최적의 계획은 사용 가능한 작업자 수에 따라 달라질 수 있으므로 쿼리 성능이 저하될 수 있습니다. 이러한 현상이 자주 발생하는 경우 증가를 고려하세요.max_worker_processes그리고max_parallel_workers더 많은 작업자가 동시에 실행되거나 감소될 수 있도록max_parallel_workers_per_gather그래서 기획자는 더 적은 수의 작업자를 요청합니다.
주어진 병렬 쿼리에 대해 성공적으로 시작된 모든 백그라운드 작업자 프로세스는 계획의 병렬 부분을 실행합니다. 리더는 계획의 해당 부분도 실행하지만 추가 책임이 있습니다. 또한 작업자가 생성한 모든 튜플을 읽어야 합니다. 계획의 병렬 부분이 적은 수의 튜플만 생성하는 경우 리더는 추가 작업자처럼 동작하여 쿼리 실행 속도를 높이는 경우가 많습니다. 반대로, 계획의 병렬 부분이 많은 수의 튜플을 생성하는 경우 리더는 작업자가 생성한 튜플을 읽고 해당 레벨 위의 계획 노드에 필요한 추가 처리 단계를 수행하는 데 거의 전적으로 전념할 수 있습니다.집결노드 또는집합 병합노드. 그러한 경우 리더는 계획의 무지개 토토 부분을 실행하는 작업을 거의 수행하지 않습니다.
계획의 병렬 부분 상단에 있는 노드가 다음과 같을 때집합 병합보다는집결, 이는 계획의 무지개 토토 부분을 실행하는 각 프로세스가 정렬된 순서로 튜플을 생성하고 리더가 순서 보존 병합을 수행하고 있음을 나타냅니다. 대조적으로,집결편리한 순서로 작업자로부터 튜플을 읽어 기존에 존재했던 모든 정렬 순서를 파기합니다.