15.3. 윈 토토 계획#

각 작업자는 계획의 윈 토토 부분을 완료하기 때문에 실행하기 때문에 단순히 일반 쿼리 계획을 사용하여 여러 작업자를 사용하여 실행하는 것은 불가능합니다. 각 작업자는 출력 결과 집합의 전체 복사본을 생성하므로 쿼리가 평소보다 빠르게 실행되지는 않지만 잘못된 결과가 생성됩니다. 대신, 계획의 윈 토토 부분은 쿼리 최적화 프로그램에 내부적으로 알려진 것이어야 합니다.부분 계획; 즉, 필요한 각 출력 행이 정확히 하나의 협력 프로세스에 의해 생성되도록 보장되는 방식으로 계획을 실행하는 각 프로세스가 출력 행의 하위 집합만 생성하도록 구성되어야 합니다. 일반적으로 이는 쿼리의 구동 테이블에 대한 스캔이 윈 토토 인식 스캔이어야 함을 의미합니다.

15.3.1. 윈 토토 스캔#

현재 다음 유형의 병렬 인식 테이블 스캔이 지원됩니다.

  • 에서윈 토토 순차 스캔, 테이블의 블록은 범위로 나누어지고 협력 프로세스 간에 공유됩니다. 각 작업자 프로세스는 추가 블록 범위를 요청하기 전에 지정된 블록 범위의 스캔을 완료합니다.

  • 윈 토토 비트맵 힙 스캔, 하나의 프로세스가 리더로 선택됩니다. 해당 프로세스는 하나 이상의 인덱스를 스캔하고 방문해야 할 테이블 블록을 나타내는 비트맵을 작성합니다. 그런 다음 이러한 블록은 윈 토토 순차 스캔처럼 협력 프로세스 간에 분할됩니다. 즉, 힙 스캔은 병렬로 수행되지만 기본 인덱스 스캔은 병렬로 수행되지 않습니다.

  • 윈 토토 인덱스 스캔또는윈 토토 인덱스 전용 스캔, 협력 프로세스가 차례로 인덱스에서 데이터를 읽습니다. 현재 윈 토토 인덱스 스캔은 btree 인덱스에 대해서만 지원됩니다. 각 프로세스는 단일 인덱스 블록을 요청하고 해당 블록이 참조하는 모든 튜플을 스캔하고 반환합니다. 다른 프로세스는 동시에 다른 인덱스 블록에서 튜플을 반환할 수 있습니다. 병렬 btree 스캔의 결과는 각 작업자 프로세스 내에서 정렬된 순서로 반환됩니다.

Btree가 아닌 인덱스 스캔과 같은 다른 스캔 유형은 향후 병렬 스캔을 지원할 수 있습니다.

15.3.2. 윈 토토 조인#

비병렬 계획에서와 마찬가지로 구동 테이블은 중첩 루프, 해시 조인 또는 병합 조인을 사용하여 하나 이상의 다른 테이블에 조인될 수 있습니다. 조인의 내부 측면은 병렬 작업자 내에서 실행하는 것이 안전한 경우 플래너가 지원하는 모든 종류의 비병렬 계획일 수 있습니다. 조인 유형에 따라 내부가 병렬 계획일 수도 있습니다.

  • 중첩 루프 조인, 안쪽은 항상 비평행입니다. 전체 실행이기는 하지만 내부가 인덱스 스캔인 경우 외부 튜플과 인덱스의 값을 조회하는 루프가 협력 프로세스로 나누어지기 때문에 효율적입니다.

  • 병합 조인, 내부 측면은 항상 비병렬 계획이므로 전체 실행됩니다. 모든 협력 프로세스에서 작업과 결과 데이터가 중복되므로 특히 정렬을 수행해야 하는 경우 이는 비효율적일 수 있습니다.

  • 해시 조인("병렬" 접두사 제외), 내부 측면은 모든 협력 프로세스에 의해 완전히 실행되어 해시 테이블의 동일한 복사본을 만듭니다. 해시 테이블이 크거나 계획이 비싸면 이는 비효율적일 수 있습니다. 에서병렬 해시 조인, 안쪽은 a윈 토토 해시공유 해시 테이블 구축 작업을 협력 프로세스로 나눕니다.

15.3.3. 윈 토토 집계#

PostgreSQL2단계로 집계하여 병렬 집계를 지원합니다. 먼저 쿼리의 병렬 부분에 참여하는 각 프로세스는 집계 단계를 수행하여 해당 프로세스가 인식하는 각 그룹에 대한 부분 결과를 생성합니다. 이는 계획에 다음과 같이 반영됩니다.부분 집계노드. 둘째, 부분 결과는 다음을 통해 리더에게 전송됩니다.집결또는집합 병합. 마지막으로 리더는 최종 결과를 생성하기 위해 모든 작업자의 결과를 다시 집계합니다. 이는 계획에 다음과 같이 반영됩니다.집계 완료노드.

왜냐하면집계 완료노드는 리더 프로세스에서 실행되므로 입력 행 수에 비해 상대적으로 많은 수의 그룹을 생성하는 쿼리는 쿼리 플래너에 덜 선호되는 것으로 나타납니다. 예를 들어 최악의 시나리오에서는 다음과 같은 그룹 수가 표시됩니다.집계 완료노드는 다음의 모든 작업자 프로세스에서 본 입력 행 수만큼 많을 수 있습니다.부분 집계스테이지. 이러한 경우 병렬 집계를 사용해도 성능상 이점이 전혀 없습니다. 쿼리 플래너는 계획 프로세스 중에 이를 고려하므로 이 시나리오에서는 병렬 집계를 선택하지 않을 것입니다.

병렬 집계는 모든 상황에서 지원되지 않습니다. 각 집계는 다음과 같아야 합니다.PostgreSQL : 문서 : 17 : 15.4. 토토 사이트 안전병렬 처리를 위한 것이며 결합 기능이 있어야 합니다. 집계에 다음 유형의 전환 상태가 있는 경우내부, 직렬화 및 역직렬화 기능이 있어야 합니다. 참조집합 생성자세한 내용을 확인하세요. 집계 함수 호출에 다음이 포함된 경우 병렬 집계가 지원되지 않습니다.독특또는주문 기준절은 순서가 지정된 집합 집계 또는 쿼리에 포함된 경우에도 지원되지 않습니다.그룹화 세트. 쿼리에 관련된 모든 조인이 계획의 윈 토토 부분에도 포함되는 경우에만 사용할 수 있습니다.

15.3.4. 윈 토토 추가#

언제든지PostgreSQL여러 소스의 행을 단일 결과 세트로 결합해야 하며, 다음을 사용합니다.추가또는MergeAppend계획 노드. 이는 구현할 때 일반적으로 발생합니다.유니온 올또는 분할된 테이블을 스캔할 때. 이러한 노드는 다른 계획에서와 마찬가지로 병렬 계획에서도 사용할 수 있습니다. 그러나 병렬 계획에서는 플래너가 대신에병렬 추가노드.

추가노드가 병렬 계획에 사용되는 경우 각 프로세스는 하위 계획이 나타나는 순서대로 실행되므로 참여하는 모든 프로세스가 협력하여 첫 번째 하위 계획이 완료될 때까지 실행한 다음 거의 동시에 두 번째 계획으로 이동합니다. 때병렬 추가17183_17493

또한 일반과 달리추가병렬 계획 내에서 사용될 때 부분적인 하위 항목만 가질 수 있는 노드, a병렬 추가노드는 부분 및 비부분 하위 계획을 모두 가질 수 있습니다. 부분적이지 않은 하위 항목을 두 번 이상 스캔하면 중복 결과가 생성되므로 단일 프로세스로만 스캔됩니다. 따라서 여러 결과 세트를 추가하는 계획은 효율적인 부분 계획을 사용할 수 없는 경우에도 대략적인 병렬 처리를 달성할 수 있습니다. 예를 들어, 병렬 스캔을 지원하지 않는 인덱스를 사용해야만 효율적으로 구현할 수 있는 분할된 테이블에 대한 쿼리를 생각해 보세요. 기획자는 다음을 선택할 수 있습니다.병렬 추가일반인덱스 스캔계획; 각각의 개별 인덱스 스캔은 단일 프로세스에 의해 완료될 때까지 실행되어야 하지만, 다른 프로세스에 의해 동시에 다른 스캔이 수행될 수 있습니다.

enable_parallel_append이 기능을 비활성화하는 데 사용할 수 있습니다.

15.3.5. 윈 토토 계획 팁#

예상된 쿼리가 윈 토토 계획을 생성하지 못하는 경우 축소를 시도할 수 있습니다.parallel_setup_cost또는parallel_tuple_cost. 물론, 이 계획은 기획자가 선호한 직렬 계획보다 느릴 수도 있지만 항상 그런 것은 아닙니다. 이러한 설정 값이 매우 작아도(예: 둘 다 0으로 설정한 후) 윈 토토 계획을 얻지 못하는 경우 쿼리 플래너가 쿼리에 대한 윈 토토 계획을 생성할 수 없는 이유가 있을 수 있습니다. 참조PostgreSQL : 문서 : 17 : 15.2. 병렬 토토 사이트 추천를 언제 사용할 수 있습니까?그리고PostgreSQL : 문서 : 17 : 15.4. 토토 사이트 안전이런 경우가 발생하는 이유에 대한 정보.

병렬 계획을 실행할 때 다음을 사용할 수 있습니다.설명(분석, 자세한 설명)각 계획 노드에 대한 작업자별 통계를 표시합니다. 이는 작업이 모든 계획 노드 간에 균등하게 분배되는지 확인하고 더 일반적으로 계획의 성능 특성을 이해하는 데 유용할 수 있습니다.

수정사항 제출

문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 설명이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.