이 문서는 지원되지 않는 버전의 메이저 토토 사이트 용입니다.
당신은에 대해 같은 페이지를 볼 수 있습니다토토 핫 : 문서 : 17 : 14 장. 성능 팁버전 또는 위에 나열된 다른 지원 버전 중 하나입니다.

챕터 13. 메이저 토토 사이트 팁

쿼리 성능은 많은 것들의 영향을받을 수 있습니다. 일부 이들은 사용자가 조작 할 수 있지만 다른 사람들은 시스템의 기본 설계의 기본. 이 장 이해 및 조정에 대한 힌트를 제공메이저 토토 사이트메이저 토토 사이트.

13.1. 사용메이저 토토 사이트

메이저 토토 사이트a쿼리 계획각 쿼리마다 주어집니다. 쿼리 구조와 일치하는 올바른 계획을 선택하고 데이터의 속성은 상당히 중요합니다 메이저 토토 사이트. 를 사용할 수 있습니다.메이저 토토 사이트어떤 쿼리 계획을 확인하려면 명령 시스템은 모든 쿼리를 만듭니다. 계획 읽기는 예술입니다 광범위한 튜토리얼이 필요하지 않습니다. 그러나 여기 있습니다 몇 가지 기본 정보.

현재 인용 한 숫자메이저 토토 사이트are :

  • 추정 시작 비용 (출력 전 시간 소비 스캔이 시작될 수 있습니다 (예 : 정렬 시간) 마디.)

  • 총 비용 (모든 행을 검색 해야하는 경우) 그들이 아닐 수도 있습니다 : aLimit조항은 지불이 부족합니다 예를 들어 총 비용.)

  • 이 계획 노드에 의해 추정 된 행 출력 수 (다시, 완료에 실행 된 경우에만)

  • 예상 평균 너비 (바이트) 출력 이 계획 노드

비용은 디스크 페이지의 단위로 측정됩니다. (CPU 노력 추정은 일부를 사용하여 디스크 페이지 장치로 변환됩니다 상당히 임의의 퍼지 요인. 실험하고 싶다면 이러한 요소는 런타임 구성 목록을 참조하십시오 매개 변수섹션 16.4.5.2.)

상위 수준 노드의 비용이 모든 어린이 노드의 비용이 포함되어 있습니다. 또한 중요합니다 비용이 플래너/옵티마이저이저에 관심이 있습니다. 특히 비용은 그렇지 않습니다 결과 행을 전송하는 데 소요되는 시간을 고려하십시오 진실에서 꽤 지배적 인 요소가 될 수있는 프론트 엔드 경과 시간; 그러나 플래너는 할 수 없기 때문에 그것을 무시합니다 계획을 변경하여 변경하십시오. (모든 정확한 계획이 출력됩니다 같은 행 세트, 우리는 신뢰합니다.)

행 출력은 약간 까다 롭기 때문에not행 수 쿼리에 의해 처리/스캔되면 일반적으로 반영됩니다 모든의 추정 선택성여기서-적용중인 클래스 조건 이 노드에서. 이상적으로 최상위 행 추정치는 의지합니다 실제로 반환, 업데이트 된 행 수에 근사하십시오 쿼리로 삭제되었습니다.

몇 가지 예가 있습니다 (회귀 테스트 데이터베이스 사용 후진공 분석및 7.3 개발 소스) :

10에서 선택 *에서 선택 *;

                         쿼리 계획
----------------------------------------------------------------------------------
 Tenk1의 Seq 스캔 (비용 = 0.00..333.00 행 = 10000 너비 = 148)

이것은 얻는 것만 큼 간단합니다. 그렇다면

선택 *에서 pg_class에서 relname = 'tenk1';

당신은 그것을 알게 될 것입니다Tenk1233 개의 디스크 페이지와 10000 행이 있습니다. 따라서 비용은 추정됩니다 233 페이지 읽기, 각각 1.0 명으로 정의되고 10000 *CPU_TUPLE_COST현재 0.01입니다 (try쇼 cpu_tuple_cost).

이제 쿼리를 수정하겠습니다여기서조건 :

TENK1에서 선택 *을 메이저 토토 사이트하십시오.

                         쿼리 계획
-------------------------------------------------------------------
 Tenk1의 Seq 스캔 (비용 = 0.00..358.00 행 = 1033 너비 = 148)
   필터 : (고유 한 <1000)

출력 행의 추정치가 내려져여기서절. 그러나 스캔이 될 것입니다 여전히 10000 행을 모두 방문해야하므로 비용은 감소; 사실 그것은 추가를 반영하기 위해 조금 올라갔습니다. CPU 시간을 확인하는 데 소요되는 시간여기서조건.

이 쿼리가 선택한 실제 행 수는 1000입니다. 그러나 추정치는 대략적인 것입니다. 복제하려고한다면 이 실험은 아마도 약간 다를 것입니다 추정; 또한, 각 이후에 변경됩니다.분석통계가 생성 되었기 때문에 명령 에 의해분석는 무작위로 가져옵니다 테이블의 샘플.

조건을 훨씬 더 제한하도록 쿼리 수정 :

10 <50에서 tenk1에서 선택 *을 선택하십시오.

                                   쿼리 계획
---------------------------------------------------------------------------------------------------------------------------------------------------------.
 Tenk1에서 Tenk1_unique1을 사용한 인덱스 스캔 (비용 = 0.00..179.33 행 = 49 너비 = 148)
   색인 조건 : (고유 1 <50)

그리고 당신은 우리가 그것을 만들면 그것을 볼 것입니다17799_17806조건으로 충분히 선택적, 플래너 결국 인덱스 스캔이 순차적 스캔. 이 계획은 50 행만 방문하면됩니다 지수로 인해 개별 페치는 전체 디스크를 읽는 것보다 비쌉니다. 순차적으로 페이지.

다른 조건 추가여기서절 :

tenk1에서 선택 *을 선택하십시오.

                                  쿼리 계획
---------------------------------------------------------------------------------------------------------------------------------------------------------.
 Tenk1에서 Tenk1_unique1을 사용한 인덱스 스캔 (비용 = 0.00..179.45 행 = 1 너비 = 148)
   색인 조건 : (고유 1 <50)
   필터 : (stringu1 = 'xxx':: name)

추가 조건StringU1 = '트리플 엑스'출력 행 추정치를 줄이지 만 비용은 아닙니다 우리는 여전히 같은 행 세트를 방문해야하기 때문입니다. 알아채다 그게StringU1절은 될 수 없습니다 인덱스 조건으로 적용됩니다 (이 인덱스는에만 있으므로고유 한 1열). 대신 적용됩니다 인덱스에 의해 검색된 행의 필터로. 따라서 비용 실제로이 추가를 반영하기 위해 조금 올라갔습니다. 점검.

우리가 있었던 열을 사용하여 두 개의 테이블을 결합 해 보겠습니다. 토론 :

메이저 토토 사이트 *에서 * TENK1 T1, TENK2 T2에서 t1.unique1 <50 및 t1.unique2 = t2.unique2;

                               쿼리 계획
--------------------------------------------------------------------------------
 중첩 루프 (비용 = 0.00..327.02 행 = 49 너비 = 296)
   - tenk1 t1에서 tenk1_unique1을 사용한 인덱스 스캔
                                      (비용 = 0.00..179.33 줄 = 49 너비 = 148)
         색인 조건 : (고유 1 <50)
   - tenk2 t2에서 tenk2_unique2를 사용한 인덱스 스캔
                                      (비용 = 0.00..3.01 행 = 1 너비 = 148)
         색인 조건 : ( "외부".unique2 = t2.unique2)

이 중첩 루프 조인에서 외부 스캔은 동일한 색인입니다. 마지막으로 예제에서 스캔 했으므로 비용과 행 카운트는 우리가 적용하기 때문에 동일합니다여기서고유 한 < 50해당 노드에서. 그만큼t1.unique2 = t2.uique2절은 아직 관련이 없으므로 그렇지 않습니다 외부 스캔의 행 수에 영향을 미칩니다. 내부 스캔의 경우고유 2전류 값 외부 스캔 행은 내부 색인 스캔에 연결되어 생산됩니다. 와 같은 색인 조건t2.unique2 =Constant. 그래서 우리는 동일한 내부 스캔 계획과 우리가 얻은 비용, 예를 들어onique2 = there the tenk2에서 선택 *을 선택하십시오 42. 루프 노드의 비용은 기준으로 설정됩니다. 외부 스캔 비용과 내부의 반복이 반복됩니다. 각 외부 행 (49 * 3.01, 여기)과 작은 CPU를 스캔합니다. 가입 처리 시간.

이 예에서 조인의 출력 행 카운트는 다음과 같습니다. 두 스캔 행의 제품은 사실이 아니지만 사실이 아닙니다. 일반적으로 일반적으로 가질 수 있기 때문에여기서테이블 등을 모두 언급하는 조항 입력이 아닌 조인 지점에서만 적용 할 수 있습니다. 주사. 예를 들어, 추가하면어디서 ... 및 T1. Hundred <t2.hundred결합 노드의 출력 행 카운트이지만 입력을 변경하지 않습니다. 주사.

변형 계획을 보는 한 가지 방법은 플래너에게 승자가 생각했던 전략을 사용하여 사용하십시오 각 계획 유형에 대한 플래그 활성화/비활성화. (이것은 원유입니다 도구이지만 유용합니다. 참조 참조섹션 13.3.)

set enable_nestloop = off;
메이저 토토 사이트 *에서 10, Tenk2 T2에서 선택 * t1.unique1 <50 및 t1.unique2 = t2.unique2;

                               쿼리 계획
------------------------------------------------------------------------------------------
 해시 조인 (비용 = 179.45..563.06 행 = 49 너비 = 296)
   해시 조건 : ( "외부".unique2 = "내부".unique2)
   - tenk2 t2의 seq 스캔 (비용 = 0.00..333.00 행 = 10000 너비 = 148)
   - 해시 (비용 = 179.33..179.33 줄 = 49 너비 = 148)
         - tenk1 t1에서 tenk1_unique1을 사용한 인덱스 스캔
                                    (비용 = 0.00..179.33 줄 = 49 너비 = 148)
               색인 조건 : (고유 1 <50)

이 계획은 50 개의 흥미로운 행을 추출 할 것을 제안합니다.Tenk1같은 Olde Index를 사용합니다 스캔하고 메모리 해시 테이블에 보관 한 다음 순차적 스캔Tenk2, 가능한 일치에 대한 해시 테이블에 대한 조사t1.unique2 = t2.unique2각각Tenk2행. 읽는 비용TENK1해시 테이블을 설정하는 것은 전적으로입니다 해시 조인의 시작 비용, 우리는 행을 얻지 못하므로 읽기 시작할 때까지Tenk2. 가입의 총 시간 추정치 또한 해시를 조사하기위한 CPU 시간에 대한 무거운 요금도 포함되어 있습니다. 표 10000 회. 그러나 우리는아님10000 회 충전 179.33; 해시 테이블 설정은이 계획 유형에서 한 번만 수행됩니다.

플래너의 정확도를 확인할 수 있습니다. 사용하여 예상 비용메이저 토토 사이트 분석. 이 명령은 실제로 쿼리를 실행합니다 그런 다음 각 계획에 누적 된 실제 실행 시간을 표시합니다. 평범한 것과 동일한 추정 비용과 함께 노드메이저 토토 사이트쇼. 예를 들어, 우리는 할 수 있습니다 다음과 같은 결과를 얻으십시오 :

메이저 토토 사이트에 대해 선택 * 선택 *에서 10, Tenk2 T2에서 t1.unique1 <50 및 t1.unique2 = t2.unique2;

                                   쿼리 계획
---------------------------------------------------------------------------------------------------------------------------------------------------------.
 중첩 루프 (비용 = 0.00..327.02 행 = 49 너비 = 296)
                                 (실제 시간 = 1.181..29.822 행 = 50 루프 = 1)
   - tenk1 t1에서 tenk1_unique1을 사용한 인덱스 스캔
                  (비용 = 0.00..179.33 줄 = 49 너비 = 148)
                                 (실제 시간 = 0.630..8.917 행 = 50 루프 = 1)
         색인 조건 : (고유 1 <50)
   - tenk2 t2에서 tenk2_unique2를 사용한 인덱스 스캔
                  (비용 = 0.00..3.01 행 = 1 너비 = 148)
                                 (실제 시간 = 0.295..0.324 행 = 1 루프 = 50)
         색인 조건 : ( "외부".unique2 = t2.unique2)
 총 런타임 : 31.604 ms

"실제 시간"값은 실시간 밀리 초에 있지만"비용"추정치가 표시됩니다 디스크 페치의 임의의 단위; 그래서 그들은 일치하지 않을 것입니다 위로. 주의를 기울여야 할 것은 비율입니다.

일부 쿼리 계획에서는 하위 플랜 노드가 가능합니다. 두 번 이상 실행되었습니다. 예를 들어, 내부 색인 스캔은 다음과 같습니다 위의 중첩 루프 계획에서 외부 행당 한 번 실행됩니다. ~ 안에 그러한 경우,"루프"값 노드의 총 실행 수를보고합니다. 표시된 실제 시간 및 행 값은 실행 중 평균입니다. 이것은 숫자를 그 방식과 비교할 수 있도록하기 위해 비용 추정치가 표시됩니다. 곱하기"루프"실제로 총 시간을 얻는 값 노드에서 보냈습니다.

theTotal Runtime표시분석집행자 포함 스타트 업 및 종료 시간, 처리 시간뿐만 아니라 처리 시간 결과 행. 구문 분석, 재 작성, 또는 포함되지 않습니다 계획 시간. Aselect쿼리, the 총 런 타임은 일반적으로 최상위 계획 노드에 대해보고 된 총 시간. 을 위한삽입, 업데이트삭제명령, 총 실행 시간 소비 된 시간이 포함되어 있기 때문에 상당히 클 수 있습니다. 결과 행을 처리합니다. 이 명령에서 최상위 계획 노드는 본질적으로 새로운 계산에 소요되는 시간입니다. 행 및/또는 오래된 것들을 찾는 줄이지만 변화하는 데 소요되는 시간.

주목할 가치가 있습니다메이저 토토 사이트결과는 하나는 실제로 테스트하고 있습니다. 예를 들어, a 장난감 크기의 테이블은 큰 테이블에 적용되는 것으로 가정 할 수 없습니다. 그만큼 플래너의 비용 추정치는 선형이 아니므로 잘 할 수 있습니다. 더 크거나 작은 테이블에 대한 다른 계획을 선택하십시오. an 극단적 인 예는 하나의 디스크 만 차지하는 테이블에 있습니다. 페이지, 당신은 거의 항상 순차적 스캔 계획을 얻을 수 있습니다. 인덱스를 사용할 수 있습니다. 플래너는 그 사실을 알고 있습니다 하나의 디스크 페이지를 읽으려면 테이블을 처리하려면 케이스, 추가 페이지 읽기를 소비하는 데 가치가 없습니다. 색인을보세요.