19.7. 무지개 토토 계획

19.7.1. 플래너 메소드 구성

이 구성 매개 변수는 무지개 토토 최적화기가 선택한 무지개 토토 계획에 영향을 미치는 조잡한 방법을 제공합니다. 특정 무지개 토토에 대한 Optimizer가 선택한 기본 계획이 최적이 아닌 경우 A임시솔루션은 이러한 구성 매개 변수 중 하나를 사용하여 Optimizer가 다른 계획을 선택하도록하는 것입니다. 최적화가 선택한 계획의 품질을 향상시키는 더 나은 방법은 플래너 비용 상수 조정을 포함합니다 (참조섹션 19.7.2), Running분석수동으로default_statistics_target구성 매개 변수 및 사용을 사용하여 특정 열에 대한 수집 된 통계량 증가ALTER 테이블 세트 통계.

enable_bitmapscan (부울)

무지개 토토 플래너의 비트 맵 스캔 플랜 유형 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_gathermerge (부울)

무지개 토토 플래너의 수집 병합 계획 유형 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_hashagg (부울)

무지개 토토 플래너의 해시 응집 계획 유형 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_hashjoin (부울)

무지개 토토 플래너의 해시 조명 계획 유형 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_incremental_sort (부울)

무지개 토토 플래너의 증분 정렬 단계 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_indexscan (부울)

무지개 토토 플래너의 인덱스 스캔 및 인덱스 전용 스캔 플랜 유형 사용을 활성화 또는 비활성화합니다. 기본값은on. 또한 참조enable_indexonlyscan.

enable_indexonlyscan (부울)

무지개 토토 플래너의 색인 전용 스캔 플랜 유형 사용을 활성화 또는 비활성화합니다 (참조섹션 11.9). 기본값은on. 그만큼enable_indexscan무지개 토토 플래너가 인덱스 전용 스캔을 고려하도록 설정을 활성화해야합니다.

enable_material (부울)

무지개 토토 플래너의 구체화 사용을 활성화 또는 비활성화합니다. 구체화를 완전히 억제하는 것은 불가능하지만,이 변수를 끄면 플래너가 정확성에 필요한 경우를 제외하고 구체화 된 노드를 삽입하지 못하게합니다.on.

enable_mergejoin (부울)

무지개 토토 플래너의 병합-조명 계획 유형 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_nestloop (부울)

무지개 토토 플래너의 중첩 루프 조인 계획 사용을 활성화 또는 비활성화합니다. 중첩 루프 조인을 완전히 억제하는 것은 불가능하지만이 변수를 끄면 플래너가 다른 방법이있는 경우 플래너를 사용하지 못하게합니다.on.

enable_parallel_append (부울)

무지개 토토 플래너의 병렬 인식 부속 계획 유형 사용을 활성화 또는 비활성화합니다. 기본값은on.

enable_parallel_hash (부울)

무지개 토토 플래너가 병렬 해시를 사용하여 해시-조인 플랜 유형 사용을 활성화 또는 비활성화합니다. 해시 조명 계획도 활성화되지 않은 경우에는 영향을 미치지 않습니다.on.

enable_partition_pruning (부울)

무지개 토토 계획에서 파티션 된 테이블의 파티션을 제거 할 수있는 무지개 토토 플래너의 능력을 활성화 또는 비활성화합니다. 또한 무지개 토토 실행자가 무지개 토토 실행 중에 파티션을 제거 할 수있는 무지개 토토 계획을 생성 할 수있는 플래너의 무지개 토토 플랜을 생성하는 능력을 제어합니다.on. 보다섹션 5.11.4자세한 내용.

enable_partitionwise_join (부울)

무지개 토토 플래너의 파티션 타이 조인 사용을 활성화 또는 비활성화하여 일치하는 파티션에 결합하여 파티션 된 테이블 사이의 조인을 수행 할 수 있습니다. 파티션 넥타이 결합은 현재 조인 조건에 모든 파티션 키가 포함 된 경우에만 적용되며, 이는 동일한 데이터 유형이어야하며 일대일 일치하는 하위 파티션 세트가 있어야합니다.work_mem최종 계획에 나타나는 것은 스캔되는 파티션 수에 따라 선형으로 증가 할 수 있습니다. 이로 인해 무지개 토토 실행 중에 전체 메모리 소비가 크게 증가 할 수 있습니다.OFF.

enable_partitionwise_aggregate (부울)

무지개 토토 플래너의 파티션 적 그룹화 또는 집계 사용을 활성화 또는 비활성화하여 각 파티션에 대해 분할 된 테이블의 그룹화 또는 집계를 개별적으로 수행 할 수 있습니다. 인 경우그룹 by조항에는 파티션 키가 포함되어 있지 않으며, 부분 집계 만 파티션별로 수행 할 수 있으며 나중에 최종화를 수행해야합니다. 이 설정이 활성화되면 메모리 사용이 제한되는 노드 수work_mem최종 계획에 나타나는 것은 스캔되는 파티션 수에 따라 선형으로 증가 할 수 있습니다. 이로 인해 무지개 토토 실행 중에 전체 메모리 소비가 크게 증가 할 수 있습니다.OFF.

enable_seqscan (부울)

무지개 토토 플래너의 순차적 스캔 계획 유형 사용을 활성화 또는 비활성화합니다. 순차적 스캔을 완전히 억제하는 것은 불가능하지만,이 변수를 끄면 플래너가 다른 방법이있는 경우 플래너를 사용하지 못하게합니다.on.

enable_sort (부울)

무지개 토토 플래너의 명시 적 정렬 단계 사용을 활성화 또는 비활성화합니다. 명시적인 정렬을 완전히 억제하는 것은 불가능하지만,이 변수를 끄면 플래너가 다른 방법이있는 경우 플래너를 사용하지 못하게합니다.on.

enable_tidscan (부울)

무지개 토토 플래너의 사용을 활성화 또는 비활성화TID스캔 계획 유형. 기본값은on.

19.7.2. 플래너 비용 상수

the비용이 섹션에 설명 된 변수는 임의의 척도로 측정됩니다. 상대 값 만 중요하므로 동일한 요소로 모두 또는 아래로 확장하면 플래너의 선택이 변경되지 않습니다.seq_page_cost전통적으로 설정되어1.0그리고 다른 비용 변수는이를 참조하여 설정됩니다. 그러나 특정 기계의 밀리 초의 실제 실행 시간과 같이 원하는 경우 다른 규모를 사용할 수 있습니다.

Note

불행히도 비용 변수에 대한 이상적인 값을 결정하는 잘 정의 된 방법이 없습니다. 그들은 특정 설치가 수신 할 쿼리의 전체 혼합에 비해 평균으로 가장 잘 취급됩니다.

seq_page_cost (플로팅 포인트)

일련의 순차적 인 페치의 일부인 디스크 페이지 페치 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 1.0입니다.테이블 스페이스 대체).

random_page_cost (플로팅 포인트)

비 순위행 디스크 페이지의 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 4.0입니다.테이블 스페이스 대체).

이 값 감소seq_page_cost시스템이 인덱스 스캔을 선호하게됩니다. 그것을 높이면 인덱스 스캔이 비교적 비싸게 보일 것입니다.

기계식 디스크 스토리지에 대한 랜덤 액세스는 일반적으로 순차적으로 4 배보다 훨씬 비쌉니다. 그러나 인덱스 판독 값과 같이 디스크에 대한 랜덤 액세스의 대부분이 캐시에있는 것으로 가정하기 때문에 더 낮은 기본값이 사용됩니다 (4.0).

90% 캐시 속도가 작업 부하에 대한 잘못된 가정이라고 생각되면 Random_Page_Cost를 늘리면 랜덤 스토리지 읽기의 실제 비용을 더 잘 반영 할 수 있습니다. 이에 따라 데이터베이스가 전체 서버 메모리보다 작은 경우 데이터베이스가 완전히 캐시에있을 가능성이있는 경우 Random_Page_Cost 감소가 적절할 수 있습니다.1.1.

시스템에서 설정할 수는 있지만random_page_costseq_page_cost, 그렇게하는 것은 물리적으로 합리적이지 않습니다. 그러나 데이터베이스가 RAM으로 완전히 캐시되는 경우 동일하게 설정하는 것이 합리적입니다.이 경우 시퀀스에서 페이지를 터치 할 수있는 벌칙이 없기 때문입니다.

CPU_TUPLE_COST (플로팅 포인트)

쿼리 동안 각 행을 처리하는 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 0.01입니다.

cpu_index_tuple_cost (플로팅 포인트)

인덱스 스캔 중 각 인덱스 항목을 처리하는 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 0.005입니다.

cpu_operator_cost (플로팅 포인트)

쿼리 중에 실행 된 각 연산자 또는 기능 처리 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 0.0025입니다.

parallel_setup_cost (플로팅 포인트)

평행 작업자 프로세스를 시작하는 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 1000입니다.

parallel_tuple_cost (플로팅 포인트)

한 튜플을 병렬 작업자 프로세스에서 다른 프로세스로 전송하는 비용에 대한 플래너의 추정치를 설정합니다. 기본값은 0.1입니다.

min_parallel_table_scan_size (정수)

병렬 스캔을 고려하기 위해 스캔 해야하는 최소 금액의 테이블 데이터를 설정합니다. 병렬 순차적 스캔의 경우 스캔 한 테이블 데이터의 양은 항상 테이블 크기와 같지만 인덱스를 사용하면 스캔 한 테이블 데이터의 양은 일반적으로 적습니다.blcksz바이트, 일반적으로 8kb. 기본값은 8 메가 바이트 (입니다.8MB).

min_parallel_index_scan_size (정수)

병렬 스캔을 고려하기 위해 스캔 해야하는 최소한의 인덱스 데이터를 설정합니다. 병렬 인덱스 스캔은 일반적으로 전체 인덱스를 터치하지 않습니다.진공. 이 값이 단위없이 지정되면 블록으로 간주됩니다.blcksz바이트, 일반적으로 8kb. 기본값은 512 킬로 바이트 (입니다.512KB).

explud_cache_size (정수)

단일 쿼리에 사용할 수있는 디스크 캐시의 유효 크기에 대한 플래너의 가정을 설정합니다. 이것은 지수 사용 비용의 추정치에 반영됩니다.PostgreSQL의 공유 버퍼와에 사용될 커널 디스크 캐시의 부분PostgreSQL데이터 파일이지만 일부 데이터는 두 곳 모두에 존재할 수 있습니다. 또한 사용 가능한 공간을 공유해야하므로 다른 테이블에 예상되는 동시 무지개 토토 수를 고려하십시오.PostgreSQL, 커널 디스크 캐시를 예약하지도 않습니다. 추정 목적으로 만 사용됩니다.blcksz바이트, 일반적으로 8kb. 기본값은 4 기가 바이트 (입니다.4GB). (만약에blcksz8KB가 아니며, 기본값은 비례 적으로 비례합니다.)

jit_above_cost (플로팅 포인트)

활성화 된 JIT 컴파일이 활성화되는 쿼리 비용을 설정합니다 (참조제 31 장). 실행할 수 있는jit비용 계획 시간이지만 쿼리 실행을 가속화 할 수 있습니다. 이것을 설정-1JIT 컴파일을 비활성화합니다. 기본값은100000.

jit_inline_above_cost (플로팅 포인트)

JIT 컴파일이 기능 및 연산자를 인라인으로 시도하는 쿼리 비용을 설정합니다. 인라인은 계획 시간을 추가하지만 실행 속도를 향상시킬 수 있습니다.jit_above_cost. 이것을 설정-1Inlining을 비활성화합니다. 기본값은500000.

jit_optimize_above_cost (플로팅 포인트)

JIT 컴파일이 비싼 최적화를 적용하는 쿼리 비용을 설정합니다. 이러한 최적화는 계획 시간을 추가하지만 실행 속도를 향상시킬 수 있습니다.jit_above_costjit_inline_above_cost. 이것을 설정-1비싼 최적화를 비활성화합니다. 기본값은500000.

19.7.3. 유전자 무지개 토토 최적화

GEQO (Genetic Query Optimizer)는 휴리스틱 검색을 사용하여 쿼리 계획을 수행하는 알고리즘입니다. 이는 일반적인 철저한 검색 알고리즘에서 발견 한 것보다 열등한 계획을 생성하는 비용으로 복잡한 쿼리 (많은 관계에 합류하는 사람들) 계획 시간이 줄어 듭니다.59 장.

geqo (부울)

유전자 무지개 토토 최적화를 활성화 또는 비활성화합니다. 이것은 기본적으로 켜져 있습니다.geqo_threshold변수 GEQO의보다 세분화 된 제어를 제공합니다.

geqo_threshold (정수)

유전자 무지개 토토 최적화를 사용하여 최소한이 많은 무지개 토토를 계획하십시오관련된 항목. (A전체 외부 조인구성 수는 단 하나의 것으로 카운트항목.) 기본값은 12입니다. 단순한 무지개 토토의 경우 일반적으로 정기적이고 철저한 검색 플래너를 사용하는 것이 가장 좋습니다. 그러나 많은 테이블이있는 무지개 토토의 경우 철저한 검색이 너무 오래 걸리며, 종종 최적의 계획을 실행하는 것보다 오래 걸립니다. 따라서 무지개 토토 크기의 임계 값은 GEQO 사용을 관리하는 편리한 방법입니다.

geqo_effort (정수)

GEQO의 계획 시간과 쿼리 계획 품질 사이의 절충을 제어합니다. 이 변수는 1에서 10까지의 정수 여야합니다. 기본값은 5입니다.

geqo_effort실제로 직접 아무것도하지 않습니다. GEQO 동작에 영향을 미치는 다른 변수의 기본값을 계산하는 데만 사용됩니다 (아래 설명).

geqo_pool_size (정수)

GEQO가 사용하는 풀 크기를 제어합니다. 즉, 유전자 집단의 개인 수입니다. 그것은 최소 2 개 이상이어야하며 유용한 값은 일반적으로 100 ~ 1000입니다. 0으로 설정되면 (기본 설정), 적절한 값은에 따라 선택됩니다geqo_effort및 무지개 토토의 테이블 수.

geqo_generations (정수)

GEQO가 사용하는 세대 수, 즉 알고리즘의 반복 수를 제어합니다. 하나 이상이어야하며 유용한 값은 풀 크기와 같은 범위에 있습니다.geqo_pool_size.

geqo_selection_bias (플로팅 포인트)

GEQO가 사용하는 선택 바이어스를 제어합니다. 선택 바이어스는 모집단 내에서 선택적 압력입니다.

geqo_seed (플로팅 포인트)

조인 순서 검색 공간을 통해 임의의 경로를 선택하기 위해 GEQO가 사용하는 임의의 숫자 생성기의 초기 값을 제어합니다. 값은 0 (기본값)에서 1까지 다양합니다.

19.7.4. 기타 플래너 옵션

default_statistics_target (정수)

열 특정 대상이없는 테이블 열에 대한 기본 통계 대상 설정ALTER 테이블 세트 통계. 값 큰 값이 필요한 시간을 증가시킵니다분석그러나 플래너 추정치의 품질을 향상시킬 수 있습니다. 기본값은 100입니다.의 통계 사용에 대한 자세한 내용은PostgreSQL무지개 토토 플래너, 참조섹션 14.2.

제약 _exclusion (enum)

무지개 토토 플래너의 테이블 제약 조건을 사용하여 무지개 토토를 최적화합니다. 허용 값제약 _exclusionareon(모든 테이블에 대한 제약 조건 검사),OFF(제약 조건을 조사하지 않음) 및파티션(상속 자식 테이블 및에 대해서만 제약 조건을 검사하십시오.Union All서브 쿼리).파티션는 기본 설정입니다. 그것은 종종 전통적인 상속 트리와 함께 공연을 개선하기 위해 사용됩니다.

이 매개 변수가 특정 테이블에 허용되면 플래너는 무지개 토토 조건을 테이블과 비교합니다check제약 조건 및 조건이 제약 조건과 모순되는 스캐닝 테이블을 생략합니다. 예를 들어:

테이블 작성 부모 (키 정수, ...);

제약 제외가 활성화 된이select스캔하지 않습니다Child1000전혀 성능 향상.

현재, 제약 제외는 상속 트리를 통해 테이블 ​​분할을 구현하는 데 종종 사용되는 경우에만 기본적으로 만 가능합니다. 모든 테이블에 켜면 간단한 무지개 토토에서 눈에 띄는 추가 계획 오버 헤드가 부과되며, 대부분 간단한 무지개 토토에 대한 이점이 없습니다.enable_partition_pruning.)

참조섹션 5.11.5파티셔닝 구현을 위해 제약 제외 사용에 대한 자세한 내용은

cursor_tuple_fraction (플로팅 포인트)

검색 될 커서의 행의 비율에 대한 플래너의 추정치를 설정합니다. 기본값은 0.1입니다.빠른 시작커서 계획을 세우는 것은 모든 행을 가져 오는 데 오랜 시간이 걸리는 동안 처음 몇 행을 빨리 검색합니다. 더 큰 값은 총 추정 시간에 더 중점을 둡니다.

from_collapse_limit (정수)

플래너는 결과가있는 경우 하위 무지개 토토를 상단 무지개 토토로 병합합니다목록은이 많은 항목을 가질 수 없습니다. 더 작은 값은 계획 시간을 줄이지 만 열등한 무지개 토토 계획을 수립 할 수 있습니다.PostgreSQL : 문서 : 13 : 14.3. 명백한 스포츠 토토 베트맨 조항으로 플래너 제어.

이 값 설정geqo_threshold또는 그 이상은 GEQO 플래너의 사용을 유발하여 최적화되지 않은 계획을 초래할 수 있습니다. 보다섹션 19.7.3.

jit (부울)

결정jit컴파일은를 사용할 수 있습니다.PostgreSQL, 사용 가능한 경우 (참조제 31 장). 기본값은on.

join_collapse_limit (정수)

플래너는 명시 적으로 다시 작성합니다Join구성 (제외전체 조인s) 목록으로의항목이 많은 항목이 발생할 때마다 항목이 발생할 때마다 발생합니다. 더 작은 값은 계획 시간을 줄이지 만 무지개 토토 계획이 열등 할 수 있습니다.

기본적 으로이 변수는와 동일하게 설정됩니다.from_collapse_limit, 대부분의 용도에 적합합니다. 1으로 설정하면 명시 적의 재정렬이 방지됩니다Joins. 따라서 무지개 토토에 지정된 명시 적 조인 순서는 관계가 결합되는 실제 순서가됩니다.PostgreSQL : 문서 : 13 : 14.3. 명백한 스포츠 토토 베트맨 조항으로 플래너 제어.

이 값 설정geqo_threshold또는 그 이상은 GEQO 플래너의 사용을 유발하여 최적화되지 않은 계획을 초래할 수 있습니다. 보다섹션 19.7.3.

Parallel_Leader_Participation (부울)

리더 프로세스가 무지개 토토 계획을 실행하도록 허용수집and합병 수집작업자 프로세스를 기다리는 대신 노드. 기본값은on. 이 값 설정OFF리더가 튜플을 충분히 빨리 읽지 않기 때문에 근로자가 차단 될 가능성을 줄이지 만, 리더 프로세스는 첫 번째 튜플을 생산하기 전에 작업자 프로세스가 시작될 때까지 대기해야합니다. 리더가 도움을 줄 수 있거나 성과를 방해 할 수있는 정도는 계획 유형, 근로자 수 및 무지개 토토 기간에 따라 다릅니다.

force_parallel_mode (enum)

성능 혜택이 예상되지 않는 경우에도 테스트 목적으로 병렬 무지개 토토를 사용할 수 있습니다. 허용 값force_parallel_modeareOFF(성능을 향상시킬 것으로 예상되는 경우에만 병렬 모드를 사용),on(안전하다고 생각되는 모든 무지개 토토에 대한 병렬 무지개 토토) 및회귀(좋아요on, 그러나 추가 행동이 아래에 설명 된대로 변경됨).

보다 구체적 으로이 값을ona 추가수집무지개 토토가 안전한 것으로 보이는 무지개 토토 계획의 맨 위로 노드하여 무지개 토토가 병렬 작업자 내부에서 실행됩니다. 병렬 작업자를 사용할 수 없거나 사용할 수없는 경우에도 평행 무지개 토토 컨텍스트에서 금지 된 하위 트랜잭션을 시작하는 것과 같은 작업은 플래너가 무지개 토토가 실패하지 않을 것이라고 믿지 않는 한 금지됩니다.병렬 불안한(또는 아마도,병렬 제한).

이 값 설정회귀설정과 동일한 효과가 있습니다on자동화 회귀 테스트를 용이하게하기위한 몇 가지 추가 효과. 일반적으로 병렬 작업자의 메시지에는 다음을 나타내는 컨텍스트 줄이 포함되어 있지만 설정이 포함됩니다.회귀출력이 비 평행 실행과 동일하도록이 라인을 억제합니다. 또한,수집이 설정의 계획에 추가 된 노드는 숨겨져 있습니다설명출력 이이 설정이 회전하면 얻을 수있는 내용과 일치하도록 출력OFF.

plan_cache_mode (enum)

준비된 진술 (예 : PL/PGSQL에 의해 명시 적으로 준비되거나 암시 적으로 생성됨)은 사용자 정의 또는 일반 계획을 사용하여 실행할 수 있습니다. 특정 매개 변수 값 세트를 사용하여 각 실행에 대해 사용자 정의 계획이 새롭게 이루어 지지만 일반적인 계획은 매개 변수 값에 의존하지 않으며 실행에 따라 재사용 할 수 있습니다.plan_cache_mode. 허용 값은입니다.auto(기본값),Force_Custom_planandForce_Generic_plan. 이 설정은 캐시 된 계획이 준비 될 때가 아니라 실행 될 때 고려됩니다.준비.

수정 제출

문서에 맞지 않는 내용이 있으면 일치하지 않습니다.이 양식문서 문제를보고하려면