2.2 ANALYZE, BUFFERS, WAL
ANALYZE는 실제 row와 시간을, BUFFERS는 shared, local, temp block 활동을, WAL은 생성된 WAL record와 byte를 보여 줍니다.
EXPLAIN (ANALYZE, BUFFERS, WAL, SETTINGS, SUMMARY)
SELECT *
FROM orders
WHERE customer_id = 42
ORDER BY created_at DESC
LIMIT 20;
Actual 값 읽기
actual time=0.10..1.20 rows=20 loops=1
Node가 여러 번 실행되면 time과 rows는 loop당 평균입니다. 총 처리 row는 rows × loops로 봅니다. Nested loop inner node에서 작은 평균도 loop가 매우 많으면 큰 비용이 됩니다.
Buffer hit는 PostgreSQL shared buffer에서 찾았다는 뜻이며 CPU와 memory 비용이 0이라는 뜻은 아닙니다. Read는 storage 요청을 나타내지만 OS page cache에서 충족될 수도 있습니다. track_io_timing을 활성화하면 read와 write timing을 더 볼 수 있습니다.
Sort의 Disk, Hash의 Batches > 1, temp block read와 written은 spill 단서입니다. WAL byte가 큰 DML은 replica, archive, backup storage에도 영향을 줍니다.
Execution time 차이가 작을 때 instrumentation overhead와 system noise를 고려합니다. TIMING OFF로 per-node timing overhead를 줄이면서 row와 buffer 통계를 얻는 실험도 가능합니다.