EXPLAIN — 문의 실행 계획 표시
스포츠 토토 결과 [ (옵션[, ...] ) ]성명어디에서옵션다음 중 하나일 수 있습니다.분석 [부울] 자세한 내용 [부울] 비용 [부울] 설정 [부울] GENERIC_PLAN [부울] 버퍼 [부울] 직렬화 [ 없음 | 텍스트 | 바이너리 ] 월 [부울] 타이밍 [부울] 요약 [부울] 메모리 [부울] 형식 텍스트 | XML | JSON | YAML
이 명령은 실행 계획을 표시합니다.포스트그레SQL플래너는 제공된 명령문을 생성합니다. 실행 계획은 문에서 참조하는 테이블을 일반 순차 스캔, 인덱스 스캔 등으로 스캔하는 방법과 여러 테이블을 참조하는 경우 각 입력 테이블에서 필요한 행을 모으는 데 어떤 조인 알고리즘을 사용하는지 보여줍니다.
표시의 가장 중요한 부분은 예상 명령문 실행 비용입니다. 이는 명령문을 실행하는 데 걸리는 시간에 대한 플래너의 추측입니다(임의적인 비용 단위로 측정되지만 일반적으로 디스크 페이지 가져오기를 의미함). 실제로 두 개의 숫자가 표시됩니다. 첫 번째 행이 반환되기 전의 시작 비용과 모든 행을 반환하는 데 드는 총 비용입니다. 대부분의 쿼리에서는 총 비용이 중요하지만 하위 쿼리와 같은 컨텍스트에서는존재함, 플래너는 가장 작은 총 비용 대신 가장 작은 시작 비용을 선택합니다(어쨌든 실행자는 한 행을 얻은 후에 중지하므로). 또한, a로 반환할 행 수를 제한하는 경우제한절, 플래너는 어떤 계획이 실제로 가장 저렴한지 추정하기 위해 엔드포인트 비용 간에 적절한 보간을 수행합니다.
그분석옵션은 명령문이 계획된 것이 아니라 실제로 실행되도록 합니다. 그런 다음 각 계획 노드 내에서 소비된 총 경과 시간(밀리초) 및 실제로 반환된 총 행 수를 포함하여 실제 런타임 통계가 디스플레이에 추가됩니다. 이는 기획자의 추정이 현실에 가까운지 확인하는 데 유용합니다.
문이 실제로 실행되는 경우는 다음과 같습니다.분석옵션이 사용됩니다. 하지만스포츠 토토 결과a의 모든 출력을 삭제합니다.선택이 반환되면 문의 다른 부작용이 평소와 같이 발생합니다. 이용을 원하시는 경우분석 스포츠 토토 결과에삽입, 업데이트, 삭제, 병합, 다음으로 테이블 생성또는실행명령문이 데이터에 영향을 미치지 않도록 하는 경우 다음 접근 방식을 사용하세요.
시작; 스포츠 토토 결과 분석 ...; 롤백;
분석명령을 실행하고 실제 실행 시간 및 기타 통계를 표시합니다. 이 매개변수의 기본값은거짓.
상세계획에 관한 추가 정보를 표시합니다. 특히 계획 트리의 각 노드에 대한 출력 열 목록, 스키마 한정 테이블 및 함수 이름을 포함하고, 항상 범위 테이블 별칭을 사용하여 표현식의 변수에 레이블을 지정하고, 통계가 표시되는 각 트리거의 이름을 항상 인쇄합니다. 쿼리 식별자가 계산된 경우에도 표시됩니다. 참조compute_query_id14832_14880거짓.
비용각 계획 노드의 예상 시작 및 총 비용, 예상 행 수 및 각 행의 예상 너비에 대한 정보를 포함합니다. 이 매개변수의 기본값은참.
설정구성 매개변수에 대한 정보를 포함합니다. 특히 기본 제공 기본값과 다른 값으로 쿼리 계획에 영향을 미치는 옵션을 포함합니다. 이 매개변수의 기본값은거짓.
GENERIC_PLAN문에 다음과 같은 매개변수 자리 표시자가 포함되도록 허용$1, 해당 매개변수 값에 의존하지 않는 일반 계획을 생성합니다. 보다준비일반 계획 및 매개변수를 지원하는 명령문 유형에 대한 세부정보입니다. 이 매개변수는와 함께 사용할 수 없습니다.분석. 기본값은거짓.
버퍼버퍼 사용량에 대한 정보를 포함합니다. 특히 적중, 읽기, 더티화 및 작성된 공유 블록 수, 적중, 읽기, 더티화 및 작성된 로컬 블록 수, 읽고 쓴 임시 블록 수, 데이터 파일 블록, 로컬 블록 및 임시 파일 블록을 읽고 쓰는 데 소요된 시간(밀리초)을 포함합니다.track_io_timing활성화되었습니다. 에이히트필요할 때 블록이 이미 캐시에서 발견되었기 때문에 읽기가 회피되었음을 의미합니다. 공유 블록에는 일반 테이블과 인덱스의 데이터가 포함됩니다. 로컬 블록에는 임시 테이블과 인덱스의 데이터가 포함됩니다. 임시 블록에는 정렬, 해시, Materialise 계획 노드 및 유사한 경우에 사용되는 단기 작업 데이터가 포함됩니다. 블록 수더러워진이 쿼리에 의해 변경되었지만 이전에 수정되지 않은 블록의 수를 나타냅니다. 블록 수작성쿼리 처리 중에 이 백엔드에 의해 캐시에서 제거된 이전에 더티된 블록 수를 나타냅니다. 상위 레벨 노드에 대해 표시되는 블록 수에는 모든 하위 노드에서 사용되는 블록 수가 포함됩니다. 텍스트 형식에서는 0이 아닌 값만 인쇄됩니다. 버퍼 정보는 다음과 같은 경우 자동으로 포함됩니다.분석사용됩니다.
직렬화비용에 대한 정보 포함직렬화 중쿼리의 출력 데이터입니다. 즉, 클라이언트에 보내기 위해 텍스트 또는 바이너리 형식으로 변환합니다. 이는 데이터 유형 출력 함수가 비싸거나 다음과 같은 경우 쿼리를 정기적으로 실행하는 데 필요한 시간의 상당 부분을 차지할 수 있습니다.토스트ed 값은 라인 외부 저장소에서 가져와야 합니다.스포츠 토토 결과의 기본 동작,직렬화 없음, 이러한 변환을 수행하지 않습니다. 만약에텍스트 직렬화또는바이너리 직렬화이 지정되면 적절한 변환이 수행되고 이에 소요된 시간이 측정됩니다(단,타이밍 꺼짐지정됨). 만약버퍼옵션도 지정되면 변환과 관련된 모든 버퍼 액세스도 계산됩니다. 그러나 어떠한 경우에도 마찬가지입니다.스포츠 토토 결과실제로 결과 데이터를 클라이언트에 보냅니다. 따라서 네트워크 전송 비용은 이런 방식으로 조사할 수 없습니다. 직렬화는 다음 경우에만 활성화될 수 있습니다.분석또한 활성화되어 있습니다. 만약에연속화인수 없이 작성되었습니다.텍스트가정됩니다.
WALWAL 레코드 생성에 대한 정보를 포함합니다. 구체적으로 레코드 수, 전체 페이지 이미지 수(fpi), 생성된 WAL 양(바이트) 및 WAL 버퍼가 가득 찬 횟수를 포함합니다. 텍스트 형식에서는 0이 아닌 값만 인쇄됩니다. 이 매개변수는 다음과 같은 경우에만 사용할 수 있습니다.분석또한 활성화되어 있습니다. 기본값은거짓.
타이밍실제 시작 시간과 각 노드에서 소요된 시간을 출력에 포함합니다. 시스템 시계를 반복적으로 읽는 오버헤드로 인해 일부 시스템에서는 쿼리 속도가 크게 느려질 수 있으므로 이 매개변수를 다음과 같이 설정하는 것이 유용할 수 있습니다.거짓정확한 시간이 아닌 실제 행 개수만 필요한 경우. 이 옵션을 사용하여 노드 수준 타이밍이 꺼진 경우에도 전체 문의 실행 시간은 항상 측정됩니다. 이 매개변수는 다음과 같은 경우에만 사용할 수 있습니다.분석또한 활성화되어 있습니다. 기본값은참.
요약쿼리 계획 뒤에 요약 정보(예: 총 타이밍 정보)를 포함합니다. 요약 정보는 기본적으로 다음과 같은 경우에 포함됩니다.분석이 사용되지만 그렇지 않으면 기본적으로 포함되지 않지만 이 옵션을 사용하여 활성화할 수 있습니다. 계획 시간스포츠 토토 결과 실행필요한 경우 캐시에서 계획을 가져오는 데 필요한 시간과 재계획에 필요한 시간이 포함됩니다.
메모리쿼리 계획 단계의 메모리 소비에 대한 정보를 포함합니다. 특히 플래너 인메모리 구조에서 사용하는 정확한 스토리지 양과 할당 오버헤드를 고려한 총 메모리를 포함합니다. 이 매개변수의 기본값은거짓.
형식TEXT, XML, JSON 또는 YAML이 될 수 있는 출력 형식을 지정하십시오. 텍스트가 아닌 출력에는 텍스트 출력 형식과 동일한 정보가 포함되지만 프로그램에서 구문 분석하기가 더 쉽습니다. 이 매개변수의 기본값은텍스트.
부울선택한 옵션을 켜야 할지 꺼야 할지 지정합니다. 쓸 수 있습니다참, ON, 또는1옵션을 활성화하고거짓, 꺼짐, 또는0비활성화합니다. 그만큼부울값을 생략할 수도 있습니다. 이 경우참가정됩니다.
성명모두선택, 삽입, 업데이트, 삭제, 병합, 값, 실행, 선언, 다음으로 테이블 생성또는다음으로 구체화된 뷰 생성실행 계획을 보고 싶은 진술입니다.
명령의 결과는 선택한 계획에 대한 텍스트 스포츠 토토 결과입니다.성명, 선택적으로 실행 통계로 주석이 추가됩니다.섹션 14.1제공된 정보를 스포츠 토토 결과합니다.
허용하기 위해PostgreSQL쿼리를 최적화할 때 합리적으로 정보를 바탕으로 결정을 내릴 수 있는 쿼리 플래너,pg_statistic데이터는 쿼리에 사용된 모든 테이블에 대해 최신 상태여야 합니다. 일반적으로autovacuum 데몬이 작업은 자동으로 처리됩니다. 그러나 최근에 테이블의 내용이 크게 변경된 경우 수동으로 작업해야 할 수도 있습니다.분석autovacuum이 변경 사항을 따라잡을 때까지 기다리지 마세요.
실행 계획에서 각 노드의 런타임 비용을 측정하기 위해 현재 구현된분석 스포츠 토토 결과쿼리 실행에 프로파일링 오버헤드를 추가합니다. 그 결과 실행 중분석 스포츠 토토 결과쿼리의 경우 쿼리를 정상적으로 실행하는 것보다 훨씬 더 오래 걸릴 수 있습니다. 오버헤드의 양은 쿼리의 성격과 사용되는 플랫폼에 따라 달라집니다. 최악의 경우는 실행당 시간이 거의 필요하지 않은 계획 노드와 하루 중 시간을 얻기 위해 상대적으로 느린 운영 체제 호출을 사용하는 머신에서 발생합니다.
단일 테이블에 간단한 쿼리에 대한 계획을 표시하려면정수열 및 10000행:
스포츠 토토 결과 SELECT * FROM foo;
쿼리 계획
-------------------------------
foo의 Seq 스캔(비용=0.00..155.00 행=10000 너비=4)
(1행)
다음은 JSON 출력 형식을 사용한 동일한 쿼리입니다:
스포츠 토토 결과(JSON 형식) SELECT * FROM foo;
쿼리 계획
--------------------------------
[ +
+
"계획": +
"노드 유형": "Seq 스캔",+
"관계 이름": "foo", +
"별칭": "foo", +
"시작 비용": 0.00, +
"총 비용": 155.00, +
"계획 행": 10000, +
"평면 너비": 4 +
+
+
]
(1행)
인덱스가 있고 인덱싱 가능한 쿼리를 사용하는 경우어디조건,스포츠 토토 결과다른 계획을 보여줄 수도 있습니다:
EXPLAIN SELECT * FROM foo WHERE i = 4;
쿼리 계획
------------------------------------
foo에서 fi를 사용한 인덱스 스캔(비용=0.00..5.98행=1너비=4)
지수 조건: (i = 4)
(2행)
다음은 동일한 쿼리이지만 YAML 형식입니다:
스포츠 토토 결과(YAML 형식) SELECT * FROM foo WHERE i='4';
쿼리 계획
------------------
- 계획: +
노드 유형: "인덱스 스캔" +
스캔 방향: "앞으로"+
인덱스 이름: "fi" +
관계 이름: "foo" +
별칭: "foo" +
시작 비용: 0.00 +
총 비용: 5.98 +
계획 행: 1 +
평면 폭: 4 +
인덱스 조건: "(i = 4)"
(1행)
XML 형식은 독자의 연습 문제로 남겨둡니다.
다음은 비용 추정이 억제된 동일한 계획입니다:
스포츠 토토 결과(비용 거짓) SELECT * FROM foo WHERE i = 4;
쿼리 계획
---------------
foo에서 fi를 사용한 인덱스 스캔
지수 조건: (i = 4)
(2행)
다음은 집계 함수를 사용하는 쿼리에 대한 쿼리 계획의 예입니다.
EXPLAIN SELECT sum(i) FROM foo WHERE i < 10;
쿼리 계획
--------------------------------------------------------
집계(비용=23.93..23.93행=1너비=4)
- foo에서 fi를 사용하여 인덱스 스캔(비용=0.00..23.92행=6너비=4)
지수 조건: (i < 10)
(3행)
다음은 사용 예입니다스포츠 토토 결과 실행준비된 쿼리에 대한 실행 계획을 표시하려면:
PREPARE 쿼리(int, int) AS SELECT sum(bar) FROM 테스트
ID $1 AND ID < $2인 경우
그룹별로 foo;
EXPLAIN ANALYZE 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) AND (id < 200))
인덱스 검색: 1
버퍼: 공유 적중=4
계획 시간: 0.244ms
실행 시간: 0.073ms
(10행)
물론, 여기에 표시된 구체적인 숫자는 관련된 테이블의 실제 내용에 따라 달라집니다. 또한 숫자와 선택한 쿼리 전략도 다를 수 있습니다.PostgreSQL플래너 개선으로 인해 출시되었습니다. 게다가,분석명령은 무작위 샘플링을 사용하여 데이터 통계를 추정합니다. 따라서 새로 실행한 후에 비용 추정이 변경될 수 있습니다.분석, 테이블의 실제 데이터 분포가 변경되지 않은 경우에도 마찬가지입니다.
이전 예에서는 다음을 보여주었습니다.“커스텀”에 제공된 특정 매개변수 값에 대한 계획실행. 또한 다음을 사용하여 수행할 수 있는 매개변수화된 쿼리에 대한 일반적인 계획을 보고 싶을 수도 있습니다.GENERIC_PLAN:
스포츠 토토 결과(GENERIC_PLAN)
SELECT 합계(막대) FROM 테스트
ID $1 AND ID < $2인 경우
그룹별로 foo;
쿼리 계획
------------------------------------------------------------------
HashAggregate(비용=26.79..26.89 행=10 너비=12)
그룹 키: foo
- 테스트 시 test_pkey를 사용한 인덱스 스캔(비용=0.29..24.29 행=500 너비=8)
지수 조건: ((id $1) AND (id < $2))
(4행)
이 경우 파서는 다음을 올바르게 추론했습니다.$1그리고$2다음과 동일한 데이터 유형을 가져야 합니다id, 따라서의 매개변수 유형 정보가 부족합니다.준비문제가 아니었어요. 다른 경우에는 매개변수 기호의 유형을 명시적으로 지정해야 할 수도 있습니다. 이는 유형을 캐스팅하여 수행할 수 있습니다. 예를 들면 다음과 같습니다.
스포츠 토토 결과(GENERIC_PLAN)
SELECT 합계(막대) FROM 테스트
WHERE id $1::integer AND id < $2::integer
그룹별로 foo;
없습니다스포츠 토토 결과SQL 표준에 정의된 문입니다.
다음 구문은 이전에 사용되었습니다.PostgreSQL버전 9.0이며 계속 지원됩니다.
스포츠 토토 결과 [ 분석 ] [ 자세한 스포츠 토토 결과 ]성명
이 구문에서 옵션은 표시된 순서대로 정확하게 지정되어야 합니다.
문서에 올바르지 않은 내용이 있으면 일치하지 않습니다. 특정 기능에 대한 경험이 있거나 추가 스포츠 토토 결과이 필요한 경우 이용해주세요이 양식문서 문제를 보고합니다.