1.3 측정과 안전 장치
먼저 client가 체감하는 elapsed time과 server 내부 실행 시간을 구분합니다. EXPLAIN ANALYZE는 executor instrumentation overhead가 있고 result 전송 비용을 완전히 대표하지 않습니다.
\timing on
EXPLAIN (ANALYZE, BUFFERS, WAL, SETTINGS, SUMMARY)
SELECT ...;
PostgreSQL 18에서는 MEMORY와 SERIALIZE option도 사용할 수 있습니다. 설치 version이 지원하는지 \h EXPLAIN으로 확인합니다.
DML 안전성
ANALYZE option은 statement를 실제 실행합니다.
BEGIN;
EXPLAIN (ANALYZE, BUFFERS, WAL)
UPDATE orders SET status = 'refunded' WHERE id = 42;
ROLLBACK;
Trigger가 외부 system에 side effect를 만들거나 sequence가 증가하는 등 rollback만으로 되돌아오지 않는 효과가 있을 수 있습니다. Production DML은 staging, 별도 writable 복제 환경, sampling 대안을 우선 검토합니다. 일반적인 physical hot standby replica에서는 DML과 DML을 실행하는 EXPLAIN ANALYZE가 금지됩니다.
비교 규칙
- 같은 parameter와 transaction isolation을 사용합니다.
- 첫 실행과 warm cache 반복 실행을 구분합니다.
- 최소 여러 번 반복해 분산을 기록합니다.
- Planning, execution, client elapsed를 따로 봅니다.
- Buffer, temp I/O, WAL, row estimate를 함께 기록합니다.
- 변경 전후 DDL과 statistics 상태를 보존합니다.
가장 빠른 한 번이 아니라 workload percentile과 resource cost가 개선됐는지 판단합니다.