이 문서는 지원되지 않는 버전의 PostgreSQL을위한 것입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다PostgreSQL : 문서 : 17 : 19.7. 롤 토토 계획버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

18.7. 토토 캔 계획

18.7.1. 플래너 방법 구성

이 구성 매개 변수는 조잡한 방법을 제공합니다 토토 캔 최적화기가 선택한 토토 캔 계획에 영향을 미칩니다. 만약에 특정 토토 캔에 대한 Optimizer가 선택한 기본 계획 최적이지 않아임시솔루션은 하나를 사용하는 것입니다 이러한 구성 매개 변수 중 최적화를 강제로 제공합니다 다른 계획을 선택하십시오. 품질을 향상시키는 더 나은 방법 최적화기가 선택한 계획에는 평범 조정이 포함됩니다. 비용 상수 (참조섹션 18.7.2), runningPostgreSQL : 문서 : 9.2 : 무지개 토토수동으로, 값의 값을 높이기default_statistics_target구성 매개 변수 및 금액을 늘립니다 를 사용하여 특정 열에 대한 통계가 수집되었습니다.ALTER 테이블 세트 통계.

enable_bitmapscan(부울)

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

enable_hashagg(부울)

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

enable_hashjoin(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 해시-조인 플랜 유형. 기본값은on.

enable_indexscan(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 인덱스 스캔 계획 유형. 기본값은on.

enable_indexonlyscan(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 인덱스 전용 스캔 계획 유형. 기본값은on.

enable_material(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 구체화. 억제하는 것은 불가능합니다 구체화는 완전히 있지만이 변수를 끄십시오 플래너가 구체화 된 노드 삽입을 방지합니다 정확성에 필요한 경우를 제외하고. 그만큼 기본값은on.

enable_mergejoin(부울)

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

enable_nestloop(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 중첩 루프 가입 계획. 억제하는 것은 불가능합니다 중첩 루프는 완전히 결합되지만이 변수를 끕니다 다른 사람이있는 경우 플래너가 하나를 사용하지 못하게합니다. 사용 가능한 방법. 기본값은on.

enable_seqscan(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 순차적 스캔 계획 유형. 억제하는 것은 불가능합니다 순차적 스캔은 완전히 스캔되지만이 변수를 끄십시오 다른 사람이있는 경우 플래너가 하나를 사용하지 못하게합니다. 사용 가능한 방법. 기본값은on.

enable_sort(부울)

토토 캔 플래너의 사용을 활성화 또는 비활성화합니다 명백한 정렬 단계. 억제하는 것은 불가능합니다 명백한 분류는 완전히 분류되지만이 변수를 끄십시오 다른 사람이있는 경우 플래너가 하나를 사용하지 못하게합니다. 사용 가능한 방법. 기본값은on.

enable_tidscan(부울)

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

18.7.2. 플래너 비용 상수

the비용변수에 설명되어 있습니다 이 섹션은 임의의 척도로 측정됩니다. 그들의 상대적 값은 중요하므로 모두 위 또는 아래로 확장합니다. 같은 요소는 플래너의 변화가 없습니다. 선택. 기본적으로 이러한 비용 변수는 비용을 기준으로합니다. 순차 페이지 페치; 즉,seq_page_cost전통적으로 설정되었습니다1.0그리고 다른 비용 변수는입니다 그것을 참조하여 설정합니다. 그러나 다른 규모를 사용할 수 있습니다 원하는 경우, 예를 들어 실제 실행 시간의 밀리 초. 특정 기계에서.

참고 :불행히도 잘 정의되지 않았습니다 비용 변수에 대한 이상적인 값을 결정하는 방법. 그들은 전체 혼합보다 평균으로 가장 잘 취급됩니다. 특정 설치가 수신 할 쿼리. 이것 단지 몇 가지를 기준으로 변경하는 것을 의미합니다. 실험은 매우 위험합니다.

seq_page_cost(플로팅 가리키다)

디스크 페이지 비용에 대한 플래너의 추정치를 설정합니다. 일련의 순차적 인 페치의 일부입니다. 그만큼 기본값은 1.0입니다. 이 값은 테이블에 대해 상환 될 수 있습니다 및 설정하여 특정 테이블 스페이스의 인덱스 같은 이름의 테이블 스페이스 매개 변수 (참조테이블 스페이스 대체).

random_page_cost(플로팅 가리키다)

a 비 순차적 인 디스크 페이지. 기본값은 4.0입니다. 이 값은 테이블 스페이스 매개 변수를 설정하여 특정 테이블 스페이스 같은 이름의 (참조테이블 스페이스 대체).

이 값 감소seq_page_cost시스템이 발생합니다 인덱스 스캔을 선호합니다. 그것을 높이면 인덱스 스캔이 보일 것입니다 상대적으로 더 비쌉니다. 둘 다를 올릴 수 있습니다 디스크 I/O의 중요성을 변경하기 위해 함께 값 CPU 비용에 대한 비용은 다음 매개 변수.

기계식 디스크 스토리지에 대한 랜덤 액세스는 일반적으로입니다 4 배의 순차적 액세스보다 훨씬 비쌉니다. 그러나 더 낮은 기본값이 사용됩니다 (4.0) 색인과 같은 대부분의 임의의 디스크 액세스 읽기는 캐시에 있다고 가정합니다. 기본값은 할 수 있습니다 무작위 액세스를 40 번 모델링하는 것으로 생각하십시오. 무작위의 90%를 기대하면서 순차적보다 느립니다 캐시를 읽습니다.

90% 캐시 속도가 잘못되었다고 생각되면 작업량에 대한 가정은 증가 할 수 있습니다 random_page_cost의 실제 비용을 더 잘 반영합니다 랜덤 스토리지 읽기. 이에 따라 데이터 인 경우 언제와 같이 캐시에 완전히있을 가능성이 높습니다. 데이터베이스는 총 서버 메모리보다 작으며 random_page_cost 감소가 적절할 수 있습니다. 저장 그것은 순차적 인 것에 비해 무작위 판독 비용이 낮으며 예를 들어 솔리드 스테이트 드라이브는 또한 더 나은 모델 일 수도 있습니다 random_page_cost에 대한 값이 낮습니다.

팁 :시스템에서 설정할 수는 있지만random_page_cost보다SEQ_PAGE_COST, 그것은입니다 그렇게하는 것은 신체적으로 현명하지 않습니다. 그러나 설정 데이터베이스가 전적으로 인 경우 동등한 의미가 있습니다 이 경우 페널티가 없기 때문에 RAM으로 캐시 시퀀스에서 페이지를 터치합니다. 또한, a 크게 가축 데이터베이스 두 값을 낮추어야합니다 비용 이후 CPU 매개 변수와 관련이 있습니다 이미 RAM으로 페이지를 가져 오는 것은 일반적으로.

CPU_TUPLE_COST(부동 가리키다)

가공 비용에 대한 플래너의 추정치를 설정합니다 쿼리 중 각 행. 기본값은 0.01입니다.

cpu_index_tuple_cost(플로팅 포인트)

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

cpu_operator_cost(플로팅 가리키다)

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

explud_cache_size(정수)

유효 크기에 대한 플래너의 가정을 설정합니다 단일 쿼리에 사용할 수있는 디스크 캐시의 이것은 사용 비용의 추정치에 반영됩니다. 색인; 값이 높을수록 인덱스 스캔 가능성이 높아집니다 더 낮은 값이 사용되면 가능성이 높아집니다. 순차적 스캔이 사용됩니다. 이것을 설정할 때 둘 다 고려해야 할 매개 변수PostgreSQL의 공유 버퍼 및 사용될 커널 디스크 캐시의 일부PostgreSQL데이터 파일. 또한 예상 동시 수를 고려하십시오 다른 테이블에 토토 캔가 필요하기 때문입니다 사용 가능한 공간을 공유하십시오. 이 매개 변수는 효과가 없습니다 에 할당 된 공유 메모리의 크기로PostgreSQL도 예약하지도 않습니다 커널 디스크 캐시; 추정에만 사용됩니다 목적. 시스템은 또한 데이터가 남아 있다고 가정하지 않습니다 토토 캔 사이의 디스크 캐시. 기본값은 128입니다 메가 바이트 (128MB).

18.7.3. 유전자 토토 캔 Optimizer

GENETIC QUERY OPTIMIZER (GEQO)는 알고리즘입니다. 휴리스틱 검색을 사용한 쿼리 계획. 이것은 계획을 줄입니다 복잡한 쿼리 (많은 관계에 합류하는 사람들)를위한 시간, 때로는 열등한 계획을 생산하는 비용 정상적인 철저한 검색 알고리즘에 의해 발견됩니다. 자세한 내용 정보 참조메이저 토토 사이트 : 문서 : 9.2 : 유전자 쿼리 옵티마이저.

geqo(부울)

유전자 토토 캔 최적화를 활성화 또는 비활성화합니다. 이것 기본적으로 켜져 있습니다. 일반적으로 끄지 않는 것이 가장 좋습니다 생산에서; 그만큼geqo_threshold변수는 더 많은 것을 제공합니다 geqo의 세분화 제어

geqo_threshold(Integer)

유전자 토토 캔 최적화를 사용하여 AT와의 토토 캔를 계획하십시오 최소한이 많은 것항목 관련된. (A전체 외부 가입하다구성 수는 단 하나로 카운트항목.) 기본값은 12입니다 쿼리 일반적으로 일반을 사용하는 것이 가장 좋습니다. 철저한 검색 플래너이지만 많은 쿼리 철저한 검색이 너무 오래 걸리고 종종 더 오래 걸립니다 차선 계획을 실행하는 형벌보다. 따라서, a 쿼리 크기의 임계 값은 편리한 방법입니다. geqo의 사용 관리

geqo_effort(Integer)

계획 시간과 쿼리 사이의 상충 관계를 제어합니다 GEQO의 계획 품질. 이 변수는 정수가되어야합니다 1에서 10까지의 범위. 기본값은 5입니다. 더 큰 값은 쿼리 계획을 수행하는 데 소요되는 시간을 증가시킵니다 또한 효율적인 쿼리 계획이 가능성을 높입니다 선택됩니다.

geqo_effort실제로는 그렇지 않습니다 직접 무엇이든 할 수 있습니다. 계산하는 데만 사용됩니다 영향을 미치는 다른 변수의 기본값 GEQO 동작 (아래 설명). 원하는 경우 가능합니다 대신 다른 매개 변수를 손으로 설정합니다.

geqo_pool_size(정수)

GEQO가 사용하는 풀 크기를 제어합니다. 유전자 집단의 개인 수. 해야합니다 두 개 이상이고 유용한 값은 일반적으로 100에서 1000. 0으로 설정되면 (기본 설정) 적절한 값은에 따라 선택됩니다geqo_effort및 테이블 수 토토 캔.

geqo_generations(Integer)

GEQO가 사용하는 세대 수를 제어합니다 알고리즘의 반복 수입니다. 그럴 것입니다 적어도 하나이며 유용한 값은 수영장 크기. 0으로 설정된 경우 (기본 설정) 그런 다음 적절한 값이 선택됩니다.geqo_pool_size.

geqo_selection_bias(플로팅 포인트)

GEQO가 사용하는 선택 바이어스를 제어합니다. 그만큼 선택 바이어스는 내에서의 선택적 압력입니다 인구. 값은 1.50 ~ 2.00 일 수 있습니다. 후자 기본값입니다.

geqo_seed(플로팅 포인트)

임의의 초기 값을 제어합니다 GEQO가 사용하는 생성기는 주문 검색 공간에 가입하십시오. 값의 범위는 0입니다 (기본값) 하나. 값을 변경하면 세트가 변경됩니다 조인 경로의 탐색으로, 더 나은 또는 더 나은 더 나쁜 최고의 길을 찾았습니다.

18.7.4. 다른 플래너 옵션

default_statistics_target(Integer)

테이블 열의 기본 통계 대상을 설정합니다 v.Alter Table Set Statistics. 더 큰 값 필요한 시간을 늘리십시오분석그러나 품질을 향상시킬 수 있습니다 플래너의 추정치. 기본값은 100입니다. 자세한 내용 의 통계 사용에 대한 정보PostgreSQL토토 캔 플래너, 참조섹션 14.2.

제약 _exclusion(enum)

토토 캔 플래너의 테이블 제약 조건 사용을 제어합니다 토토 캔를 최적화합니다. 허용 값제약 _exclusionareon(모든 테이블에 대한 제약 조건 검사),OFF(제약 조건을 조사하지 않음), 그리고파티션(검사 상속 자식 테이블 및에 대한 제약 조건Union All서브 쿼리).파티션기본값입니다 환경. 그것은 종종 상속과 함께 사용됩니다 성능을 향상시키기 위해 분할 된 테이블.

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

테이블 PARLE (Key Integer, ...);
테이블 child1000을 만듭니다 (확인 (1000과 1999 사이의 키)) 상속 (부모);
테이블 child2000을 만듭니다 (확인 (2000 년에서 2999 년 사이의 키)) 상속 (부모);
...
선택 *에서 key = 2400;에서 부모 중에서 선택하십시오.

제약 제외가 활성화 된이select스캔하지 않습니다Child1000개선 성능.

현재, 제약 제외는 기본적으로 활성화되어 있습니다 종종 테이블을 구현하는 데 사용되는 경우에만 분할. 모든 테이블에 켜면 추가로 부과됩니다 간단하게 눈에 띄는 오버 헤드 계획 쿼리, 그리고 대부분은 단순한 것에 대한 혜택을 얻지 못할 것입니다. 쿼리. 분할 된 테이블이 없다면 완전히 끄는 것을 선호합니다.

참조섹션 5.9.4사용에 대한 자세한 내용은 제약 제외 및 분할.

cursor_tuple_fraction(플로팅 포인트)

a의 비율에 대한 플래너의 추정치를 설정합니다 검색 될 커서의 행. 기본값은 0.1입니다. 이 설정의 작은 값은 플래너를 향한 바이어스입니다 사용"빠른 시작"계획 커서, 처음 몇 행을 빨리 검색합니다 아마도 모든 행을 가져 오는 데 오랜 시간이 걸릴 것입니다. 더 큰 값은 총 추정에 더 중점을 둡니다 시간. 최대 1.0으로 커서가 계획됩니다 총액 만 고려할 때 일반 쿼리와 똑같습니다 첫 행이 얼마나 빨리 가질 수있는 예상 시간 배달.

from_collapse_limit(Integer)

플래너는 하위 토토 캔를 상단 토토 캔로 병합합니다 결과From목록 이 많은 항목 이상이 없습니다. 작은 값이 줄어 듭니다 계획 시간이지만 열등한 쿼리 계획을 수립 할 수 있습니다. 그만큼 기본값은 8입니다. 자세한 내용은 참조섹션 14.3.

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

join_collapse_limit(정수)

플래너가 명시 적으로 다시 작성합니다Join구조물 (제외전체 조인s) 목록으로의From그 이상의 목록이있을 때마다 항목 이 많은 항목이 발생할 것입니다. 작은 값이 줄어 듭니다 계획 시간이지만 열등한 토토 캔 계획을 산출 할 수 있습니다.

기본적 으로이 변수는와 동일하게 설정됩니다.from_collapse_limit대부분의 용도에 적합합니다. 1으로 설정하면 아무 것도 방지합니다 명시 적 재주문Joins. 따라서 쿼리에 지정된 명시 적 조인 순서는 관계가 결합 된 실제 순서가 되십시오. 쿼리 플래너가 항상 선택하는 것은 아니기 때문입니다 최적의 조인 순서, 고급 사용자가 선택할 수 있습니다 이 변수를 일시적으로 설정 한 다음 명시 적으로 원하는 명령에 가입하십시오. 자세한 정보 보다PostgreSQL : 문서 : 9.2 : 명시 적 조인 조항으로 토토 커뮤니티 제어.

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