본문 바로가기

PostgreSQL

Explain

Explain 사용 모드

Explain은 크게 2가지 모드로 사용할 수 있다.

1) 예측 모드: 실제 수행은 하지 않고 예상 실행 계획을 제공한다.

2) 실행 모드: 실제 수행을 한 후에 실행 계획, 수행 시간, IO 블록 수를 제공한다.

 

예측 모드 사용법

explain select * from t2;

QUERY PLAN

--------------------------------------------------------------

Seq Scan on t2 (cost=0.00..18334.00 rows=1000000 width=37)

• 쿼리 앞에 explain 키워드만 추가하면 된다.

• 통계 정보를 참고해서 COST, 예상 ROWS, 칼럼 길이 정보를 제공한다.

실행 모드 사용법

explain (analyze, buffers) select * from t2;

QUERY PLAN

--------------------------------------------------------------

Seq Scan on t2 (cost=0.00..18334.00 rows=1000000 width=37)

(actual time=0.008..173.641 rows=1000000 loops=1)

Buffers: shared hit=8334

Planning time: 0.023 ms

Execution time: 286.944 ms

 

실행 모드

• 쿼리 앞에 explain analyze 키워드만 입력하면 된다.

IO 블록 수를 확인하기 위해서는 buffers 키워드를 추가한다.

Step 별 실제 수행 시간, 실제 ROWS, Loop 횟수, Planning Time, Execution Time을 제공한다.

• 총 수행 시간은 Planning Time + Execution Time이다.

Execution Time에 화면 Display 시간은 포함되지 않는다.

• 실제로 쿼리를 수행하므로 DML 수행 시 유의해야 한다

 

Explain 결과 중 주요 항목 설명

explain (analyze, buffers) select * from t2 where c1=1;

QUERY PLAN

--------------------------------------------------------------

Seq Scan on t2 (cost=0.00..20834.00 rows=98 width=37)

(actual time=1.087..101.167 rows=100 loops=1)

Filter: (c1 = 1)

Rows Removed by Filter: 999900

Buffers: shared hit=8334

Startup Cost Total Cost

1)     Startup Cost는 첫 번째 레코드를 fetch 하는데 드는 비용

2)     Total Cost는 전체 레코드를 fetch 하는데 드는 비용

Actual Time: 첫 번째 레코드를 fetch 하는데 소요된 시간과 전체 레코드를 fetch 하는데 소요된 시간을 제공한다. 단위는 Milli-second (1/1,000)이다.

rows: 예상 로우 수와 실제 로우 수를 제공한다.

Buffers: IO 횟수를 의미한다.

shared hit: 메모리 IO 횟수, shared read: 디스크 IO 횟수

 

Explain 결과 읽는 방법

원칙 1: 안쪽부터 읽는다.

원칙 2: 조인 시에는 OUTER 테이블이 위에 위치한다.

'PostgreSQL' 카테고리의 다른 글

JOIN  (0) 2021.04.23
액세스 방식  (0) 2021.04.23
COST 계산에 이용되는 파라미터 / 통계 정보  (0) 2021.04.23
HOT (Heap Only Tuple)  (0) 2021.04.23
Vacuum, Auto Vacuum  (0) 2021.04.23