스포츠 토토 결과 - 성명서의 실행 계획 표시
스포츠 토토 결과 [(옵션
[, ...])진술
여기서옵션
중 하나 일 수 있습니다 :분석 [부울
] 말로 [부울
] 비용 [부울
] 설정 [부울
] generic_plan [부울
] 버퍼 [부울
] 직렬화 [none | 텍스트 | 이진] 월 [부울
] 타이밍 [부울
] 요약 [부울
] 메모리 [부울
] 형식 텍스트 | XML | JSON | Yaml
이 명령은 실행 계획을 표시합니다.PostgreSQLPlanner는 제공된 진술을 생성합니다. 실행 계획은 명세서에 의해 참조 된 테이블이 평범한 순차적 스캔, 인덱스 스캔 등으로 어떻게 스캔되는지를 보여줍니다. 그리고 여러 테이블이 참조되면 각 입력 테이블에서 필요한 행을 결합하는 데 결합 된 알고리즘이 사용됩니다..
디스플레이의 가장 중요한 부분은 예상 명세서 실행 비용입니다. 이는 성명서를 실행하는 데 걸리는 시간에 대한 플래너의 추측입니다 (임의적이지만 일반적으로 디스크 페이지를 의미하는 비용 단위로 측정). 실제로 두 개의 숫자가 표시됩니다. 첫 번째 행 이전의 시작 비용은 반환 될 수 있으며 모든 행을 반환하는 총 비용. 대부분의 쿼리의 경우 총 비용은 중요하지만 서브 쿼리와 같은 상황에서는존재
, 플래너는 가장 작은 총 비용 대신 가장 작은 스타트 업 비용을 선택합니다 (어쨌든 한 행을 얻은 후에 집행자가 멈추기 때문에). 또한 a로 돌아올 행 수를 제한하는 경우Limit
조항, 플래너는 종말점 비용 사이에 적절한 보간을하여 어떤 계획이 실제로 가장 저렴한 지 추정합니다.
the분석
옵션으로 인해 명령문이 실제로 실행됩니다. 그런 다음 실제 실행 시간 통계는 각 계획 노드 (밀리 초) 내에서 소비 된 총 경과 시간과 실제로 반환 한 총 행 수를 포함하여 디스플레이에 추가됩니다. 이것은 플래너의 추정치가 현실에 가까운 지 확인하는 데 유용합니다.
진술이 실제로 실행된다는 것을 명심하십시오분석
옵션이 사용됩니다. 하지만스포츠 토토 결과
a의 출력을 폐기합니다.select
반환하고, 진술의 다른 부작용은 평소와 같이 발생합니다. 사용하고 싶다면분석
on삽입
, 업데이트
, 삭제
, 병합
, 테이블 작성
또는execute
명령이 귀하의 데이터에 영향을 미치지 않고이 방법을 사용하십시오.
시작; 분석 ...; 롤백;
분석
명령을 수행하고 실제 실행 시간 및 기타 통계를 표시하십시오. 이 매개 변수 기본값은거짓
.
Verbose
계획에 관한 추가 정보를 표시합니다. 구체적으로, 플랜 트리, 스키마-자격화 테이블 및 함수 이름에 각 노드에 대한 출력 열 목록을 포함시키고, 항상 범위 테이블 별명으로 표현식에 변수를 레이블을 지정하고, 통계가 표시되는 각 트리거의 이름을 항상 인쇄하십시오. 쿼리 식별자도 계산 된 경우 쿼리 식별자도 표시됩니다. 참조compute_query_id자세한 내용은. 이 매개 변수 기본값은거짓
.
비용
각 계획 노드의 예상 시작 및 총 비용에 대한 정보와 추정 행 수와 각 행의 추정 너비에 대한 정보를 포함시킵니다. 이 매개 변수 기본값은true
.
설정
구성 매개 변수에 대한 정보가 포함되어 있습니다. 특히, 내장 기본값과 다른 값을 가진 쿼리 계획에 영향을 미치는 옵션을 포함합니다. 이 매개 변수 기본값은거짓
.
generic_plan
명령문에 매개 변수 자리 표시자가 포함하도록 허용$ 1
, 그리고 해당 매개 변수의 값에 의존하지 않는 일반 계획을 생성합니다. 보다준비
일반 계획에 대한 자세한 내용 및 매개 변수를 지원하는 진술 유형. 이 매개 변수는와 함께 사용할 수 없습니다.분석
. 기본적으로거짓
.
버퍼
버퍼 사용에 대한 정보를 포함하십시오. 구체적으로, 공유 블록의 수, 읽기, 더러운 및 서면, 히트, 읽기, 더러운 및 쓰여진 로컬 블록의 수, 읽기 및 작성된 온도 블록 수, 데이터 파일 블록, 로컬 블록 및 임시 파일 블록 (밀리 초) if를 읽고 쓰는 시간이 포함됩니다.track_io_timing가 활성화되었습니다. 에이HIT| 필요할 때 블록이 이미 캐시에서 발견 되었기 때문에 읽기를 피했음을 의미합니다. 공유 블록에는 일반 테이블 및 인덱스의 데이터가 포함되어 있습니다. 로컬 블록에는 임시 테이블 및 인덱스의 데이터가 포함되어 있습니다. 임시 블록에는 정렬, 해시, 구체화 계획 노드 및 유사한 사례에 사용되는 단기 작업 데이터가 포함되어 있습니다. 블록 수Dirtied이 쿼리에 의해 변경된 이전에 수정되지 않은 블록의 수를 나타냅니다. 블록 수서면쿼리 처리 중에이 백엔드에 의해 캐시에서 퇴거 된 이전에 퇴거 된 블록의 수를 나타냅니다. 상위 노드에 대해 표시된 블록 수에는 모든 하위 노드가 사용하는 블록이 포함됩니다. 텍스트 형식에서는 0이 아닌 값 만 인쇄됩니다. 버퍼 정보는 자동으로 포함됩니다.분석
사용됩니다.
Serialize
비용에 대한 정보 포함Serializing쿼리의 출력 데이터는 클라이언트로 보내기 위해 텍스트 또는 이진 형식으로 변환합니다. 데이터 타입 출력 함수가 비싸거나 if 인 경우 쿼리를 정기적으로 실행하는 데 필요한 시간의 상당 부분이 될 수 있습니다.토스트ed 값은 외부 저장소에서 가져와야합니다.스포츠 토토 결과
의 기본 동작,Serialize None
, 이러한 변환을 수행하지 않습니다. 만약에텍스트 직렬화
또는Serialize Binary
지정되고, 적절한 변환이 수행되며, 그렇게하는 시간은 측정됩니다 (타이밍 오프
지정). 인 경우버퍼
옵션도 지정된 다음 변환과 관련된 버퍼 액세스도 계산됩니다. 그러나 어떠한 경우에도스포츠 토토 결과
실제로 결과 데이터를 클라이언트에게 보냅니다. 따라서 네트워크 전송 비용은 이런 식으로 조사 할 수 없습니다. 직렬화는 일 때만 활성화 될 수 있습니다.분석
도 활성화되어 있습니다. 만약에Serialize
논쟁없이 쓰여졌습니다.텍스트
가정합니다.
Wal
WAL 레코드 생성에 대한 정보 포함. 구체적으로, 레코드 수, 전체 페이지 이미지 (FPI) 수, 바이트로 생성 된 WAL의 양 및 WAL 버퍼가 가득 찬 횟수를 포함합니다. 텍스트 형식에서는 0이 아닌 값 만 인쇄됩니다. 이 매개 변수는에만 사용할 수 있습니다.Analyze
도 활성화되어 있습니다. 기본적으로거짓
.
타이밍
출력의 각 노드에 소요되는 실제 시작 시간과 시간 포함. 시스템 시계를 반복적으로 읽는 오버 헤드는 일부 시스템에서 쿼리를 크게 느리게 할 수 있으므로이 매개 변수를 설정하는 것이 유용 할 수 있습니다거짓
실제 행만 계산하는 경우 정확한 시간이 필요합니다. 이 옵션으로 노드 레벨 타이밍을 끄는 경우에도 전체 문의 실행 시간은 항상 측정됩니다. 이 매개 변수는에만 사용할 수 있습니다.분석
도 활성화되어 있습니다. 기본적으로true
.
요약
쿼리 계획 후에 요약 정보 (예 : 총 타이밍 정보) 포함. 요약 정보는 기본적으로 기본적으로 포함됩니다.분석
는 사용되지만 기본적으로 포함되지 않지만이 옵션을 사용하여 활성화 할 수 있습니다. 계획 시간실행 스포츠 토토 결과
캐시에서 계획을 가져 오는 데 필요한 시간과 필요한 경우 다시 계획에 필요한 시간을 포함합니다.
메모리
쿼리 계획 단계에 의한 메모리 소비에 대한 정보 포함. 구체적으로, Planner Inmemory 구조에서 사용하는 정확한 양의 스토리지와 할당 오버 헤드를 고려한 총 메모리를 포함하십시오. 이 매개 변수 기본값은거짓
.
형식
텍스트, XML, JSON 또는 YAML 일 수있는 출력 형식을 지정하십시오. 비 텍스트 출력에는 텍스트 출력 형식과 동일한 정보가 포함되어 있지만 프로그램이 더 쉽습니다. 이 매개 변수 기본값은텍스트
.
부울
선택한 옵션을 켜거나 끄야하는지 여부를 지정합니다. 당신은 쓸 수 있습니다true
, on
또는1
옵션을 활성화하려면거짓
, off
또는0
비활성화하려면. 그만큼부울
값도 생략 할 수 있습니다.true
가정됩니다.
진술
Anyselect
, 삽입
, 업데이트
, 삭제
, 병합
, 값
, execute
, 선언
, 테이블 작성
또는구체화 된보기 생성
성명서, 누구의 실행 계획을보고 싶은지.
명령의 결과는를 위해 선택된 계획에 대한 텍스트 스포츠 토토 결과입니다.성명서
, 선택적으로 실행 통계로 주석이 달린다.섹션 14.1제공된 정보를 스포츠 토토 결과합니다.
허용하려면PostgreSQL쿼리를 최적화 할 때 합리적으로 정보에 입각 한 결정을 내릴 수있는 쿼리 플래너,PostgreSQL :
데이터는 쿼리에 사용되는 모든 테이블에 대해 최신 상태 여야합니다. 일반적으로autovacuum daemon자동으로 처리합니다. 그러나 최근에 테이블이 내용이 상당한 변화를 겪었다면 매뉴얼을 수행해야 할 수도 있습니다.분석
Autovacuum이 변경 사항을 따라 잡기를 기다리지 않고.
실행 계획에서 각 노드의 런타임 비용을 측정하기 위해 현재의 구현분석
쿼리 실행에 프로파일 링 오버 헤드를 추가합니다. 결과적으로 실행분석
쿼리에서 쿼리를 정상적으로 실행하는 것보다 훨씬 오래 걸릴 수 있습니다. 오버 헤드의 양은 쿼리의 특성과 사용되는 플랫폼에 따라 다릅니다. 최악의 사례는 실행 당 시간이 거의 필요하지 않은 계획 노드에서 발생하며 운영 체제가 비교적 느린 시간을 보유한 기계에서는 시간을 얻을 것을 요구합니다.
단일 테이블에 간단한 쿼리 계획을 표시하려면정수
열 및 10000 행 :
from from from from frome *를 스포츠 토토 결과하십시오. 쿼리 계획 -------------------------------------------------------------------------------- foo에서 seq 스캔 (cost = 0.00..155.00 행 = 10000 너비 = 4) (1 행)
JSON 출력 서식이 포함 된 동일한 쿼리가 있습니다.
스포츠 토토 결과 (형식 JSON) 선택 *에서 foo; 쿼리 계획 ---------------------------------- [ + + "계획": + "노드 유형": "seq scan",+ "관계 이름": "foo", + "별칭": "foo", + "시작 비용": 0.00, + "총 비용": 155.00, + "계획 행": 10000, + "계획 너비": 4 + + + ]] (1 행)
인덱스가 있고 색인이있는 쿼리를 사용하는 경우여기서
조건,스포츠 토토 결과
다른 계획을 보여줄 수 있습니다 :
FOO FROON FOO WHER I = 4; 쿼리 계획 --------------------------------------------------------------------- foo에서 fi를 사용한 인덱스 스캔 (비용 = 0.00..5.98 행 = 1 너비 = 4) 색인 조건 : (i = 4) (2 줄)
여기에 동일한 쿼리가 있지만 Yaml 형식 :
스포츠 토토 결과 (형식 YAML)을 선택하십시오 * FOO에서 i = '4'; 쿼리 계획 ------------------------------------- - 계획 : + 노드 유형 : "인덱스 스캔" + 스캔 방향 : "포워드"+ 인덱스 이름 : "fi" + 관계 이름 : "foo" + 별칭 : "foo" + 시작 비용 : 0.00 + 총 비용 : 5.98 + 줄 계획 : 1 + 계획 너비 : 4 + 색인 조건 : "(i = 4)" (1 행)
XML 형식은 독자를위한 연습으로 남아 있습니다.
비용 추정이 억제 된 동일한 계획이 있습니다.
스포츠 토토 결과 (False 비용)을 선택하십시오 * FOO에서 i = 4; 쿼리 계획 ---------------------------- foo에서 fi를 사용한 색인 스캔 색인 조건 : (i = 4) (2 줄)
집계 기능을 사용하는 쿼리에 대한 쿼리 계획의 예는 다음과 같습니다.
FOO에서 SOLE SOM SOM (i)을 스포츠 토토 결과하십시오. 쿼리 계획 ------------------------------------------------------------------- 집계 (비용 = 23.93..23.93 줄 = 1 너비 = 4) - foo에서 fi를 사용한 색인 스캔 (비용 = 0.00..23.92 행 = 6 너비 = 4) 색인 조건 : (i <10) (3 줄)
사용의 예는 다음과 같습니다.Execute 스포츠 토토 결과
준비된 쿼리에 대한 실행 계획을 표시하려면 :
테스트에서 SELECT SUM (BAR)으로 쿼리 (int, int)를 준비하십시오 여기서 id $ 1 및 id <$ 2 foo에 의한 그룹; execute 쿼리 분석을 스포츠 토토 결과하십시오 (100, 200); 쿼리 계획 ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. HASHAGGREGATE (비용 = 10.77..10.87 행 = 10 너비 = 12) (실제 시간 = 0.043..0.044 행 = 10.00 루프 = 1) 그룹 키 : Foo 배치 : 1 메모리 사용 : 24KB 버퍼 : 공유 적중 = 4 - 테스트에서 test_pkey를 사용한 색인 스캔 (비용 = 0.29..10.27 행 = 99 너비 = 8) (실제 시간 = 0.009..0.025 행 = 99.00 루프 = 1) 색인 조건 : ((ID 100) 및 (ID <200)) 색인 검색 : 1 버퍼 : 공유 적중 = 4 계획 시간 : 0.244ms 실행 시간 : 0.073ms (10 줄)
물론 여기에 표시된 특정 숫자는 관련된 테이블의 실제 내용에 따라 다릅니다. 또한 숫자와 선택한 쿼리 전략조차도마다 다를 수 있습니다.PostgreSQL플래너 개선으로 인한 릴리스. 또한분석
명령은 임의의 샘플링을 사용하여 데이터 통계를 추정합니다. 따라서 새로운 실행 후 비용 추정치가 변경 될 수 있습니다.분석
, 테이블의 실제 데이터 분포가 변경되지 않더라도.
이전 예제에 a가 표시되었음을 알 수 있습니다.“Custom”execute
. 또한 매개 변수화 된 쿼리에 대한 일반적인 계획을보고 싶을 수도 있습니다.generic_plan
:
스포츠 토토 결과 (generic_plan) 테스트에서 합 (bar)을 선택하십시오 여기서 id $ 1 및 id <$ 2 foo에 의한 그룹; 쿼리 계획 --------------------------------------------------------------------------------- 해고 그레이트 (비용 = 26.79..26.89 행 = 10 너비 = 12) 그룹 키 : Foo - 테스트에서 test_pkey를 사용한 색인 스캔 (비용 = 0.29..24.29 행 = 500 너비 = 8) 색인 조건 : ((ID $ 1) 및 (Id <$ 2)) (4 줄)
이 경우 파서는이를 올바르게 추론했습니다$ 1
and$ 2
|id
, 그래서 매개 변수 유형 정보 부족준비
는 문제가되지 않았습니다. 다른 경우에는 매개 변수 기호의 유형을 명시 적으로 지정해야 할 수도 있습니다.
스포츠 토토 결과 (generic_plan) 테스트에서 합 (bar)을 선택하십시오 여기서 id $ 1 :: 정수 및 Id <$ 2 :: 정수 foo의 그룹;
없음스포츠 토토 결과
SQL 표준에 정의 된 명령문
다음 구문이 전에 사용되었습니다PostgreSQL버전 9.0 및 여전히 지원됩니다 :
스포츠 토토 결과 [분석] [Verbose]진술
이 구문에서 옵션은 정확히 표시된 순서로 지정되어야합니다.