EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL)으로 실행 계획 심층 분석
PostgreSQL성능명령어
-- ANALYZE really executes the statement: run DML inside a transaction and roll it back
BEGIN;
EXPLAIN (ANALYZE, BUFFERS, SETTINGS, WAL, VERBOSE)
UPDATE customer SET balance = balance + 1 WHERE city = 'Ankara';
ROLLBACK;
-- For SELECT
EXPLAIN (ANALYZE, BUFFERS, SETTINGS)
SELECT name FROM customer ORDER BY name DESC LIMIT 10 OFFSET 1000;하는 일
실제 실행 통계와 함께 계획을 반환한다. BUFFERS는 노드별 shared hit/read/dirtied 및 temp 블록을, SETTINGS는 계획에 영향을 주는 기본값이 아닌 파라미터를, WAL은 생성된 WAL 레코드/바이트를 보여 준다.
사용 시점
추정 행과 실제 행의 차이, 디스크로 넘치는 정렬/해시(Sort Method: external merge, temp read/written), DML의 WAL 비용을 분석하기 위해.
주의
ANALYZE는 문장을 실제로 실행하므로 DML은 항상 BEGIN/ROLLBACK 안에서 실행한다(트리거와 시퀀스 증가는 여전히 발생한다). 읽기 팁: 추정 'rows'와 'actual rows' 차이가 10배 이상이면 통계 문제를 가리킨다. 루프 안의 노드는 시간과 행이 루프당 값이므로 전체는 loops를 곱한다. Index Only Scan의 'Heap Fetches'가 높으면 visibility map이 오래된 것이고, 'Workers Planned' > 'Workers Launched'이면 worker pool이 고갈된 것이다. 타이밍 오버헤드가 크면 TIMING OFF를 사용한다. COSTS OFF는 JIT 섹션도 숨긴다.