EXPLAIN의 비용

EXPLAIN의 비용 (Cost in EXPLAIN)

계획(planning) 중 쿼리 안의 테이블에 대한 테이블 통계를 기반으로 계획의 각 노드와 연관된 비용이 계산돼요. 이 계산된 비용은 EXPLAIN 문장의 출력 일부로 출력돼요.

출처: 문서

본문

계획 중 쿼리 안의 테이블에 대한 테이블 통계를 기반으로 계획의 각 노드와 연관된 비용이 계산돼요. 이 계산된 비용은 EXPLAIN 문장의 출력 일부로 출력돼요.

비용 정보는 계획 트리에서 {rows: XX (XX), cpu: XX, memory: XX, network: XX} 형식으로 표시돼요. rows는 실행 중 각 계획 노드가 출력하는 예상 행 수예요. 행 수 다음 괄호의 값은 각 계획 노드가 바이트 단위로 출력하는 데이터의 예상 크기를 가리켜요. 다른 파라미터는 계획 노드 실행에 사용되는 추정 CPU, 메모리, 네트워크 양을 나타내요. 이 값들은 실제 단위를 나타내지 않고, 계획 노드 사이의 상대 비용을 비교하는 데 사용되는 숫자예요. 이를 통해 옵티마이저가 쿼리를 실행하기 위한 최상의 계획을 고르게 해요. 값 중 하나라도 알 수 없으면 ?가 출력돼요.

예를 들어:

EXPLAIN SELECT comment FROM tpch.sf1.nation WHERE nationkey > 3;
- Output[comment] => [[comment]]
        Estimates: {rows: 22 (1.69kB), cpu: 6148.25, memory: 0.00, network: 1734.25}
    - RemoteExchange[GATHER] => [[comment]]
            Estimates: {rows: 22 (1.69kB), cpu: 6148.25, memory: 0.00, network: 1734.25}
        - ScanFilterProject[table = tpch:nation:sf1.0, filterPredicate = ("nationkey" > BIGINT '3')] => [[comment]]
                Estimates: {rows: 25 (1.94kB), cpu: 2207.00, memory: 0.00, network: 0.00}/{rows: 22 (1.69kB), cpu: 4414.00, memory: 0.00, network: 0.00}/{rows: 22 (1.69kB), cpu: 6148.25, memory: 0.00, network: 0.00}
                nationkey := tpch:nationkey
                comment := tpch:comment

일반적으로 각 계획 노드에는 비용이 하나만 출력돼요. 하지만 Scan 연산자가 Filter 및/또는 Project 연산자와 결합되면, 결합된 연산자의 각 논리적 부분에 해당하는 여러 비용 구조가 출력돼요. 예를 들어 ScanFilterProject 연산자에는 그 순서대로 Scan, Filter, Project 부분에 해당하는 세 개의 비용 구조가 출력돼요.

추정 비용은 실제 런타임 통계에 더해 EXPLAIN ANALYZE에서도 출력돼요.

더 알아보기 (Learn more)

EXPLAIN에서 비용을 읽는 방법을 배웠어요. 이어서 비용 기반 최적화(Cost-based optimizations)를 살펴보면 좋아요.