Postgresql 9.1.24 문서 | ||||
---|---|---|---|---|
롤 토토 : 문서 : 9.1 : 성능 팁 | up | 14 장. 성능 팁 | PostgreSQL : 문서 : 9.1 : 플래너가 사용하는 메이저 토토 사이트 |
PostgreSQLa쿼리 계획각 쿼리마다 수신합니다. 쿼리 구조와 일치하는 올바른 계획을 선택하고 데이터의 속성은 상당히 중요합니다 성능, 따라서 시스템에는 복잡한플래너좋은 계획을 선택하려고합니다. 당신은 할 수 있습니다 토토 사이트 추천PostgreSQL : 문서 : 9.1 : 와이즈 토토플래너가 모든 쿼리에 대해 생성하는 쿼리 계획. 계획 읽기 광범위한 튜토리얼이 필요한 예술입니다. 그러나 여기에 몇 가지 기본 정보가 있습니다.
쿼리 계획의 구조는의 나무입니다.계획 노드. 트리의 하단 레벨에있는 노드 테이블 스캔 노드입니다. 테이블에서 원시 행을 반환합니다. 거기 다른 테이블 액세스를위한 다른 유형의 스캔 노드입니다. 방법 : 순차적 스캔, 인덱스 스캔 및 비트 맵 인덱스 스캔. 쿼리에 결합, 집계, 정렬 또는 기타가 필요한 경우 원시 행에서 작업하면 추가 노드가 있습니다. 스캔 노드 위에 이러한 작업을 수행합니다. 다시, 있습니다 일반적으로 이러한 작업을 수행 할 수있는 하나 이상의 가능한 방법은 다른 노드 유형도 여기에 나타날 수 있습니다. 의 출력설명각 노드마다 하나의 줄이 있습니다 기본 노드 유형과 토토 사이트 추천을 보여주는 계획 트리 플래너가 해당 계획의 실행을 위해 만든 것으로 추정합니다. 마디. 첫 번째 줄 (최상위 노드)은 총계가 추정됩니다 계획의 실행 토토 사이트 추천; 이 숫자는 플래너입니다 최소화하려고합니다.
여기에 사소한 예가 있습니다. 출력이 어떻게 보이는지 보여주기 위해 좋다:[1]
설명 *에서 10에서 선택하십시오. 쿼리 계획 ---------------------------------------------------------------------------------- Tenk1의 Seq 스캔 (토토 사이트 추천 = 0.00..458.00 행 = 10000 너비 = 244)
인용 한 숫자설명are (왼쪽에서 오른쪽) :
추정 시작 토토 사이트 추천 (출력 전 시간이 소비됩니다 스캔이 시작될 수 있습니다 (예 : 정렬 시간) 마디)
추정 총 토토 사이트 추천 (모든 행이 검색되는 경우 그들은 그렇지 않을 수도 있습니다. 예를 들어, aLimit조항은 지불이 부족합니다 총 토토 사이트 추천Limit계획 노드 입력 노드)
이 계획 노드에 의한 추정 행 출력 수 (다시, 완료에 실행 된 경우에만)
이에 의해 출력의 추정 평균 너비 (바이트) 계획 노드
토토 사이트 추천은 플래너의 토토 사이트 추천 매개 변수 (참조섹션 18.7.2). 전통적인 관행은 토토 사이트 추천을 측정하는 것입니다 디스크 페이지의 단위; 즉,SEQ_PAGE_COST전통적으로 설정되어1.0및 다른 토토 사이트 추천 매개 변수는 그것에 대해 설정됩니다. (예제 이 섹션은 기본 토토 사이트 추천 매개 변수로 실행됩니다.)
상위 수준 노드의 토토 사이트 추천이 모든 어린이 노드의 토토 사이트 추천이 포함되어 있습니다. 또한 중요합니다 토토 사이트 추천은 플래너가 돌보는 것만 반영한다는 것을 깨달았습니다. 에 대한. 특히 토토 사이트 추천은 소요 된 시간을 고려하지 않습니다. 결과 행을 클라이언트에 전송하면 실제 경과 시간의 중요한 요소; 그러나 플래너 계획을 변경하여 변경할 수 없기 때문에 무시합니다. (모든 정확한 계획은 동일한 행 세트를 출력합니다. 우리는 신뢰합니다.)
the행값은 약간 까다 롭습니다 이기 때문에not계획 노드에서 처리 또는 스캔 한 행 수. 그것은 일반적으로, 임의의 추정 선택성을 반영하는여기서-Clase 조건 노드에 적용됩니다. 이상적으로 최상위 행 추정치는 의지합니다 실제로 반환, 업데이트 된 행 수에 근사하십시오 쿼리로 삭제되었습니다.
예제로 돌아 가기 :
10에서 선택 *에서 선택 *; 쿼리 계획 --------------------------------------------------------------------------------- Tenk1의 Seq 스캔 (토토 사이트 추천 = 0.00..458.00 행 = 10000 너비 = 244)
이것은 얻는 것만 큼 간단합니다. 그렇다면 :
relname = 'tenk1'; pg_class에서 reelpages, reltuples를 선택하십시오.
당신은 그것을 찾을 것입니다Tenk1
358 디스크 페이지 및 10000 행. 추정 토토 사이트 추천은 다음과 같이 계산됩니다
(디스크 페이지 읽기 *SEQ_PAGE_COST)
+ (줄 스캔 *CPU_TUPLE_COST).
기본적으로SEQ_PAGE_COSTis 1.0 andCPU_TUPLE_COST는 0.01이므로 추정됩니다
토토 사이트 추천은 (358 * 1.0) + (10000 * 0.01) = 458입니다.
이제 원래 쿼리를 수정하여 A여기서조건 :
SELECT * SELECT *에서 TENK1 where 1 <7000; 쿼리 계획 ------------------------------------------------------------------- Tenk1의 Seq 스캔 (토토 사이트 추천 = 0.00..483.00 행 = 7033 너비 = 244) 필터 : (고유 한 <7000)
설명출력 쇼 그만큼여기서절로 적용되는 조항"필터"조건; 이것은 그것을 의미합니다 계획 노드는 스캔하는 각 행의 조건을 확인하고 조건을 전달하는 것만 출력합니다. 추정치 출력 행은 때문에 감소했습니다.여기서절. 그러나 스캔은 여전히 필요합니다 10000 줄을 모두 방문하여 토토 사이트 추천이 줄어들지 않았습니다. 사실 조금 올라갔습니다 (10000 *cpu_operator_cost, 정확하게) 추가 CPU 시간을 반영하려면여기서조건.
이 쿼리가 선택한 실제 행 수는 7000이지만 그만큼행추정치는 대략적인 것입니다. 이 실험을 복제하려고하면 아마도 약간 다른 추정치; 또한, 각 이후에 변경됩니다.분석통계이기 때문에 명령 제작분석에서 가져 왔습니다 테이블의 무작위 샘플.
이제 조건을보다 제한적으로 만들자 :
10 <100에서 tenk1에서 선택 *을 선택하십시오. 쿼리 계획 ---------------------------------------------------------------------------------------------- Tenk1의 비트 맵 힙 스캔 (토토 사이트 추천 = 2.37..232.35 행 = 106 너비 = 244) COND를 다시 확인하십시오 : (고유 1 <100) - tenk1_unique1의 비트 맵 인덱스 스캔 (토토 사이트 추천 = 0.00..2.37 행 = 106 너비 = 0) 색인 조건 : (고유 1 <100)
여기서 플래너는 2 단계 계획을 사용하기로 결정했습니다. 하단 계획 노드는 인덱스를 방문하여 행의 위치를 찾습니다. 인덱스 조건과 일치 한 다음 상단 계획 노드 일치 실제로 테이블 자체에서 그 행을 가져옵니다. 가져 오기 별도의 행은 순차적으로 읽는 것보다 훨씬 비쌉니다 그들, 그러나 테이블의 모든 페이지가 방문한 것은 여전히 순차적 스캔보다 저렴합니다. (그만큼 두 계획 수준을 사용하는 이유는 상단 계획 노드가 색인으로 식별 된 행 위치를 물리적으로 정렬합니다. 별도의 토토 사이트 추천을 최소화하기 위해 읽기 전에 주문하십시오. 가져옵니다. 그만큼"비트 맵"노드 이름은 정렬을 수행하는 메커니즘입니다.)
여기서조건은 선택적입니다 충분히, 플래너는로 전환 할 수 있습니다."Simple"색인 스캔 계획 :
설명을 선택하십시오 * Tenk1에서 where ightor1 <3; 쿼리 계획 ---------------------------------------------------------------------------------------------- Tenk1에서 Tenk1_unique1을 사용한 인덱스 스캔 (토토 사이트 추천 = 0.00..10.00 행 = 2 너비 = 244) 색인 조건 : (고유 1 <3)
이 경우 테이블 행은 색인 순서로 가져옵니다. 읽는 것이 더 비싸지 만 그 정도는 거의 없습니다. 행 위치를 분류하는 데 드는 추가 토토 사이트 추천은 그만한 가치가 없습니다. 당신은 가장 자주이 계획 유형을 가져 오는 쿼리에 대한 것입니다. 단일 행, Queries주문 by인덱스와 일치하는 조건 주문하다.
다른 조건 추가여기서절 :
tenk1에서 선택 *을 선택하십시오. 쿼리 계획 ---------------------------------------------------------------------------------------------- Tenk1에서 Tenk1_unique1을 사용한 인덱스 스캔 (토토 사이트 추천 = 0.00..10.01 행 = 1 너비 = 244) 색인 조건 : (고유 1 <3) 필터 : (stringu1 = 'xxx':: name)
추가 조건StringU1 = 'xxx'출력 행 추정치를 줄이지 만 토토 사이트 추천은 아닙니다. 여전히 같은 행 세트를 방문해야합니다.StringU1절로 적용 할 수 없습니다 인덱스 조건 (이 인덱스가에만 있으므로고유 한 1열). 대신 필터로 적용됩니다 인덱스에 의해 검색된 줄에. 따라서 토토 사이트 추천은 실제로 있습니다 이 추가 점검을 반영하기 위해 약간 올라갔습니다.
참조 된 여러 열에 인덱스가있는 경우여기서, 플래너는 사용하도록 선택할 수 있습니다 인덱스의 및 또는 또는 조합 :
Tenk1에서 선택 *을 선택하십시오. 쿼리 계획 -------------------------------------------------------------------------------------------------------------------------. Tenk1의 비트 맵 힙 스캔 (토토 사이트 추천 = 11.27..49.11 행 = 11 너비 = 244) COND를 다시 확인하십시오 : ((고유 1 <100) 및 (고유 2 9000)) - bitmapand (토토 사이트 추천 = 11.27..11.27 행 = 11 너비 = 0) - tenk1_unique1의 비트 맵 인덱스 스캔 (토토 사이트 추천 = 0.00..2.37 행 = 106 너비 = 0) 색인 조건 : (고유 1 <100) - tenk1_unique2의 비트 맵 인덱스 스캔 (토토 사이트 추천 = 0.00..8.65 행 = 1042 너비 = 0) 색인 조건 : (고유 2 9000)
그러나 두 인덱스를 모두 방문해야하므로 그렇지 않습니다 단 하나의 색인을 사용하고 치료하는 것과 비교하여 반드시 승리 필터로서 다른 조건. 당신이 관련된 범위를 변화시키는 경우 그에 따라 계획이 바뀌는 것을 볼 수 있습니다.
우리가 있었던 열을 토토 사이트 추천하여 두 개의 테이블을 결합 해 보겠습니다. 토론 :
선택 선택 * TENK1 T1, TENK2 T2로부터 여기서 t1.unique1 <100 및 t1.unique2 = t2.unique2; 쿼리 계획 ----------------------------------------------------------------------------------------------------- 중첩 루프 (토토 사이트 추천 = 2.37..553.11 행 = 106 너비 = 488) - tenk1 t1의 비트 맵 힙 스캔 (토토 사이트 추천 = 2.37..232.35 행 = 106 너비 = 244) COND를 다시 확인하십시오 : (고유 1 <100) - tenk1_unique1의 비트 맵 인덱스 스캔 (토토 사이트 추천 = 0.00..2.37 행 = 106 너비 = 0) 색인 조건 : (고유 1 <100) - tenk2 t2에서 tenk2_unique2를 사용한 인덱스 스캔 (토토 사이트 추천 = 0.00..3.01 행 = 1 너비 = 244) 색인 조건 : (고유 2 = t1.unique2)
이 중첩 루프 조인에서 외부 (상단) 스캔은 동일합니다. 비트 맵 인덱스 스캔 우리가 앞에서 본 것과 토토 사이트 추천과 행 카운트 우리가 적용하고 있기 때문에 동일합니다여기서절고유 한 < 100해당 노드에서. 그만큼t1.unique2 = t2.uique2절은 아직 관련이 없으므로 영향을 미치지 않습니다 외부 스캔의 행 카운트. 내부 (하단) 스캔의 경우고유 2현재 외부 스캔의 값 인덱스를 생성하기 위해 행이 내부 색인 스캔에 연결됩니다. 조건과 같은 조건고유 2 =Constant. 그래서 우리는 똑같이 얻습니다 내부 스캔 계획과 우리가 얻는 토토 사이트 추천, 예를 들어select *에서 * tenk2에서 urection2 = 42. 루프 노드의 토토 사이트 추천은 토토 사이트 추천을 기준으로 설정됩니다. 외부 스캔의 및 각각에 대한 내부 스캔의 반복 OUTER ROW (106 * 3.01, 여기), 가입 할 CPU 시간이 약간 처리.
이 예에서 조인 출력 행 카운트는 두 스캔 행의 산물이지만, 그것은 모두 사실이 아닙니다. 가질 수 있기 때문에 사례여기서조항 두 테이블을 모두 언급하고 결합시에만 적용 할 수 있습니다. 입력 스캔이 아닌 포인트. 예를 들어, 추가하면여기서 ... 그리고 t1.hundred < t2.hundred노드에 가입하지만 입력 스캔을 변경하지 마십시오.
변형 계획을 보는 한 가지 방법은 플래너에게 가장 저렴한 전략을 무시하십시오 에 설명 된 플래그 활성화/비활성화섹션 18.7.1. (이것은 조잡한 도구이지만 유용합니다. 참조섹션 14.3.)
set enable_nestloop = off; 선택 * * TENK1 T1, TENK2 T2로부터 여기서 t1.unique1 <100 및 t1.unique2 = t2.unique2; 쿼리 계획 ------------------------------------------------------------------------------------------------------------ 해시 조인 (토토 사이트 추천 = 232.61..741.67 행 = 106 너비 = 488) 해시 조건 : (T2.Unique2 = t1.unique2) - TENK2 T2의 SEQ 스캔 (토토 사이트 추천 = 0.00..458.00 행 = 10000 너비 = 244) - 해시 (토토 사이트 추천 = 232.35..232.35 행 = 106 너비 = 244) - tenk1 t1의 비트 맵 힙 스캔 (토토 사이트 추천 = 2.37..232.35 행 = 106 너비 = 244) COND를 다시 확인하십시오 : (고유 1 <100) - tenk1_unique1의 비트 맵 인덱스 스캔 (토토 사이트 추천 = 0.00..2.37 행 = 106 너비 = 0) 색인 조건 : (고유 1 <100)
이 계획은 100 개의 흥미로운 행을 추출 할 것을 제안합니다.Tenk1
동일한 오래된 색인 토토 사이트 추천
스캔하고 메모리 해시 테이블에 보관 한 다음
순차적 스캔Tenk2
, 프로빙
가능한 일치에 대한 해시 테이블에t1.unique2 = t2.unique2각각Tenk2
행. 읽는 토토 사이트 추천Tenk1
해시 테이블을 설정하는 것은 시작입니다
해시 조인 토토 사이트 추천, 우리가 출력이 없기 때문에
읽기 시작Tenk2
. 총계
가입에 대한 시간 추정에는
해시 표를 10000 회 조사하는 CPU 시간. 그러나 그 점에 유의하십시오
우리는not충전
10000 회 232.35; 해시 테이블 설정은 한 번만 수행됩니다
이 계획 유형.
플래너의 정확도를 확인할 수 있습니다. 사용하여 예상 토토 사이트 추천설명 분석. 이 명령은 실제로 쿼리를 실행 한 다음 실행합니다 각 계획 노드 내에 누적 된 실제 실행 시간을 표시합니다. 평범한 것과 동일한 추정 토토 사이트 추천과 함께설명쇼. 예를 들어, 우리는 결과를 얻을 수 있습니다 이와 같이:
선택 분석에 설명 * TENK1 T1, TENK2 T2로부터 여기서 t1.unique1 <100 및 t1.unique2 = t2.unique2; 쿼리 계획 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. 중첩 루프 (토토 사이트 추천 = 2.37..553.11 행 = 106 너비 = 488) (실제 시간 = 1.392..12.700 행 = 100 루프 = 1) - tenk1 t1의 비트 맵 힙 스캔 (토토 사이트 추천 = 2.37..232.35 행 = 106 너비 = 244) (실제 시간 = 0.878..2.367 행 = 100 루프 = 1) COND를 다시 확인하십시오 : (고유 1 <100) - tenk1_unique1의 비트 맵 인덱스 스캔 (토토 사이트 추천 = 0.00..2.37 행 = 106 너비 = 0) (실제 시간 = 0.546..0.546 행 = 100 루프 = 1) 색인 조건 : (고유 1 <100) - tenk2 t2에서 tenk2_unique2를 사용한 색인 스캔 (토토 사이트 추천 = 0.00..3.01 행 = 1 너비 = 244) (실제 시간 = 0.067..0.078 행 = 1 루프 = 100) 색인 조건 : (고유 2 = t1.unique2) 총 런타임 : 14.452ms
"실제 시간"값 실시간 밀리 초, 반면토토 사이트 추천추정치는 임의 단위로 표현됩니다. 그래서 그들은 일치하지 않을 것입니다. 주의를 기울여야 할 것 실제 시간과 예상 토토 사이트 추천의 비율이 일관된.
일부 쿼리 계획에서는 하위 플랜 노드가 가능합니다. 두 번 이상 실행되었습니다. 예를 들어, 내부 색인 스캔은 다음과 같습니다 위의 중첩 루프 계획에서 외부 행당 한 번 실행됩니다. ~ 안에 그러한 경우,루프값 보고서 노드의 총 실행 수와 실제 시간 및 표시된 행 값은 실행 중 평균입니다. 이것은 끝났습니다 토토 사이트 추천이 추정되는 방식과 숫자를 비교할 수 있습니다. 표시됩니다. 곱하기루프값 실제로 노드에서 소비 된 총 시간을 얻으려면
the총 런타임표시분석집행자 스타트 업 포함 파싱, 재 작성 또는 계획 시간은 종료 시간입니다. 을 위한삽입, 업데이트, 그리고삭제명령, 소비 된 시간 테이블 변경 사항 적용은 최상위 삽입으로 충전됩니다. 계획 노드를 업데이트하거나 삭제합니다. (이 노드 아래의 계획 노드 오래된 행을 찾거나/또는 컴퓨팅하는 작업을 나타냅니다. 새로운 것들.) 실행하는 데 소요되는 시간전트리거 (있는 경우 트리거) 관련 삽입, 업데이트 또는 실행하는 데 소요되는 시간이지만 노드 삭제이후트리거는 아닙니다. 각각에 소요 된 시간 트리거 (하나전또는이후)도 별도로 표시되며 포함되어 있습니다 총 런타임. 그러나 지연된 제약 조건이 유발됩니다 거래 종료까지 실행되지 않으므로 표시분석.
실행 시간에 의해 측정되는 두 가지 중요한 방법이 있습니다분석 설명정상에서 벗어날 수 있습니다
동일한 쿼리 실행. 첫째, 출력 행이 없기 때문에
클라이언트, 네트워크 전송 토토 사이트 추천 및 I/O에게 제공됩니다
서식 토토 사이트 추천이 포함되어 있지 않습니다. 둘째,에 의해 추가 된 오버 헤드분석중요 할 수 있습니다.
특히 느린 기계에서gettimeofday ()
커널 호출.
주목할 가치가 있습니다설명결과는 하나는 실제로 테스트하고 있습니다. 예를 들어 장난감 크기의 결과 테이블은 큰 테이블에 적용되는 것으로 가정 할 수 없습니다. 플래너의 토토 사이트 추천 추정치는 선형이 아니므로 다른 것을 선택할 수 있습니다. 더 크거나 작은 테이블을 계획하십시오. 극단적 인 예는 그게 켜져 있습니다 하나의 디스크 페이지만을 차지하는 테이블은 거의 항상 인덱스 사용 가능 여부에 관계없이 순차적 인 스캔 계획을 세우십시오. 플래너는 하나의 디스크 페이지를 읽을 것임을 알고 있습니다. 어쨌든 테이블을 처리하려면 가치가 없습니다. 추가 페이지를 소비하여 인덱스를 보려고 읽습니다.
[1] |
이 섹션의 예는 회귀에서 가져옵니다 수행 후 데이터베이스 테스트진공 분석, 8.2 개발 소스를 사용하여. 당신은해야합니다 예제를 직접 시도하면 비슷한 결과를 얻을 수 있습니다. 그러나 예상 토토 사이트 추천과 행 계산은 약간 다를 수 있습니다. 왜냐하면분석의 통계입니다 정확한 샘플이 아닌 임의의 샘플. |