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 |