2025년 9월 25일:토토 커뮤니티 : 토토
이 문서는 지원되지 않는 젠 토토 버전에 대한 것입니다.
당신은 다음과 같은 페이지를 보고 싶을 수도 있습니다.와이즈 토토 : 문서 : 17 : 와이즈 토토버전 또는 위에 나열된 다른 지원 버전 중 하나를 사용하세요.

젠 토토

EXPLAIN — 문의 실행 계획 표시

시놉시스

젠 토토 [ (옵션 [, ...] ) ] 성명젠 토토 [ 분석 ] [ 자세한 젠 토토 ]성명

어디에서옵션다음 중 하나일 수 있습니다.분석 [부울]
    자세한 내용 [부울]
    비용 [부울]
    버퍼 [부울]
    타이밍 [부울]
    요약 [부울]
    형식  텍스트 | XML | JSON | YAML

젠 토토

이 명령은 실행 계획을 표시합니다.젠 토토planner는 제공된 명령문을 생성합니다. 실행 계획은 문에서 참조하는 테이블을 일반 순차 스캔, 인덱스 스캔 등으로 스캔하는 방법과 여러 테이블을 참조하는 경우 각 입력 테이블에서 필요한 행을 모으는 데 어떤 조인 알고리즘을 사용하는지 보여줍니다.

표시의 가장 중요한 부분은 예상 명령문 실행 비용입니다. 이는 명령문을 실행하는 데 걸리는 시간에 대한 플래너의 추측입니다(임의적인 비용 단위로 측정되지만 일반적으로 디스크 페이지 가져오기를 의미함). 실제로 두 개의 숫자가 표시됩니다. 첫 번째 행이 반환되기 전의 시작 비용과 모든 행을 반환하는 데 드는 총 비용입니다. 대부분의 쿼리에서는 총 비용이 중요하지만 하위 쿼리와 같은 컨텍스트에서는존재함, 플래너는 가장 작은 총 비용 대신 가장 작은 시작 비용을 선택합니다(어쨌든 실행자는 한 행을 얻은 후에 중지하므로). 또한, a로 반환할 행 수를 제한하는 경우제한절, 플래너는 어떤 계획이 실제로 가장 저렴한지 추정하기 위해 엔드포인트 비용 간에 적절한 보간을 수행합니다.

분석옵션은 명령문이 계획된 것이 아니라 실제로 실행되도록 합니다. 그런 다음 각 계획 노드 내에서 소비된 총 경과 시간(밀리초) 및 실제로 반환된 총 행 수를 포함하여 실제 런타임 통계가 디스플레이에 추가됩니다. 이는 기획자의 추정이 현실에 가까운지 확인하는 데 유용합니다.

중요

문이 실제로 실행되는 경우는 다음과 같습니다.분석옵션이 사용되었습니다. 그래도젠 토토다음의 모든 출력을 삭제합니다.선택이 반환되면 명령문의 다른 부작용이 평소와 같이 발생합니다. 이용을 원하시는 경우분석 젠 토토삽입, 업데이트, 삭제, 다음으로 테이블 생성또는실행명령문이 데이터에 영향을 주지 않도록 하는 경우 다음 접근 방식을 사용하세요.

시작;
젠 토토 분석 ...;
롤백;

오직분석그리고상세옵션은 옵션 목록을 괄호로 묶지 않고 해당 순서대로만 지정할 수 있습니다. 이전에젠 토토9.0, 괄호 안의 구문만 지원됩니다. 모든 새로운 옵션은 괄호로 묶인 구문에서만 지원될 것으로 예상됩니다.

매개변수

분석

명령을 실행하고 실제 실행 시간 및 기타 통계를 표시합니다. 이 매개변수의 기본값은거짓.

상세

계획에 관한 추가 정보를 표시합니다. 특히 계획 트리의 각 노드에 대한 출력 열 목록, 스키마 한정 테이블 및 함수 이름을 포함하고, 항상 범위 테이블 별칭을 사용하여 표현식의 변수에 레이블을 지정하고, 통계가 표시되는 각 트리거의 이름을 항상 인쇄합니다. 이 매개변수의 기본값은거짓.

비용

각 계획 노드의 예상 시작 및 총 비용, 예상 행 수 및 각 행의 예상 너비에 대한 정보를 포함합니다. 이 매개변수의 기본값은.

버퍼

버퍼 사용량에 대한 정보를 포함합니다. 구체적으로 적중, 읽기, 더티화 및 쓰기된 공유 블록 수, 적중, 읽기, 더티화 및 쓰기된 로컬 블록 수, 읽고 쓴 임시 블록 수를 포함합니다. 에이히트필요할 때 블록이 이미 캐시에서 발견되었기 때문에 읽기가 회피되었음을 의미합니다. 공유 블록에는 일반 테이블과 인덱스의 데이터가 포함됩니다. 로컬 블록에는 임시 테이블과 인덱스의 데이터가 포함됩니다. 임시 블록에는 정렬, 해시, Materialise 계획 노드 및 유사한 경우에 사용되는 단기 작업 데이터가 포함되어 있습니다. 블록 수더러워진이 쿼리에 의해 변경되었지만 이전에 수정되지 않은 블록의 수를 나타냅니다. 블록 수작성됨은 쿼리 처리 중에 이 백엔드에 의해 캐시에서 제거된 이전에 더티된 블록 수를 나타냅니다. 상위 레벨 노드에 대해 표시되는 블록 수에는 모든 하위 노드에서 사용되는 블록 수가 포함됩니다. 텍스트 형식에서는 0이 아닌 값만 인쇄됩니다. 이 매개변수는 다음과 같은 경우에만 사용할 수 있습니다.분석또한 활성화되어 있습니다. 기본값은거짓.

타이밍

실제 시작 시간과 각 노드에서 소요된 시간을 출력에 포함합니다. 시스템 시계를 반복적으로 읽는 오버헤드로 인해 일부 시스템에서는 쿼리 속도가 크게 느려질 수 있으므로 이 매개변수를 다음과 같이 설정하는 것이 유용할 수 있습니다.거짓정확한 시간이 아닌 실제 행 개수만 필요한 경우. 이 옵션을 사용하여 노드 수준 타이밍이 꺼진 경우에도 전체 문의 실행 시간은 항상 측정됩니다. 이 매개변수는 다음과 같은 경우에만 사용할 수 있습니다.분석또한 활성화되어 있습니다. 기본값은.

요약

쿼리 계획 뒤에 요약 정보(예: 총 타이밍 정보)를 포함합니다. 요약 정보는 기본적으로 다음과 같은 경우에 포함됩니다.분석가 사용되지만 그 외에는 기본적으로 포함되지 않지만 이 옵션을 사용하여 활성화할 수 있습니다. 계획 시간젠 토토 실행필요한 경우 캐시에서 계획을 가져오는 데 필요한 시간과 재계획에 필요한 시간이 포함됩니다.

형식

TEXT, XML, JSON 또는 YAML이 될 수 있는 출력 형식을 지정하십시오. 텍스트가 아닌 출력에는 텍스트 출력 형식과 동일한 정보가 포함되지만 프로그램에서 구문 분석하기가 더 쉽습니다. 이 매개변수의 기본값은텍스트.

부울

선택한 옵션을 켜야 할지 꺼야 할지 지정합니다. 쓸 수 있습니다, 켜짐, 또는1옵션을 활성화하고거짓, 꺼짐, 또는0비활성화합니다.부울값을 생략할 수도 있습니다. 이 경우가정됩니다.

성명

모두선택, 삽입, 업데이트, 삭제, , 실행, 선언, 다음으로 테이블 생성, 또는다음으로 구체화된 뷰 생성실행 계획을 보고 싶은 성명입니다.

출력

명령의 결과는 선택한 계획에 대한 텍스트 젠 토토입니다.성명, 선택적으로 실행 통계로 주석이 추가됩니다.PostgreSQL : 문서 : 11 : 14.1. 토토 결과 사용제공된 정보를 젠 토토합니다.

참고

허용하기 위해포스트그레SQL쿼리를 최적화할 때 합리적으로 정보를 바탕으로 결정을 내릴 수 있는 쿼리 플래너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(비용=9.54..9.54행=1 너비=8)(실제 시간=0.156..0.161행=11 루프=1)
   그룹 키: foo
   - 테스트 시 test_pkey를 사용한 인덱스 스캔(비용=0.29..9.29 행=50 너비=8) (실제 시간=0.039..0.091 행=99 루프=1)
         지수 조건: ((id  $1) AND (id < $2))
 계획 시간: 0.197ms
 실행 시간: 0.225ms
(6행)

물론 여기에 표시된 구체적인 숫자는 관련된 테이블의 실제 내용에 따라 달라집니다. 또한 숫자와 선택한 쿼리 전략도 다를 수 있습니다.포스트그레SQL플래너 개선으로 인해 출시되었습니다. 게다가,분석명령은 무작위 샘플링을 사용하여 데이터 통계를 추정합니다. 따라서 새로 실행한 후에 비용 추정이 변경될 수 있습니다.분석, 테이블의 실제 데이터 분포가 변경되지 않은 경우에도 마찬가지입니다.

호환성

없습니다젠 토토SQL 표준에 정의된 문입니다.

또한 참조

분석