DBAtlas · 데이터베이스 운영 아틀라스

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 섹션도 숨긴다.

DBAtlas에서 열기 →

관련 항목