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