본문으로 건너뛰기

6.3 Parallel query

Parallel query는 leader와 worker가 scan, join, aggregate 일부를 나눕니다. Worker 시작과 data 교환 비용이 있으므로 작은 query에는 불리할 수 있습니다.

EXPLAIN (ANALYZE, BUFFERS)
SELECT status, sum(amount)
FROM orders
GROUP BY status;

Gather 또는 Gather Merge, planned workers, launched workers와 각 worker 통계를 봅니다. Planned보다 launched가 적다면 system worker 한도와 동시 query를 확인합니다.

SHOW max_worker_processes;
SHOW max_parallel_workers;
SHOW max_parallel_workers_per_gather;

제한 요소

  • Parallel unsafe function
  • DML, locking, cursor 조건
  • Table size와 parallel cost
  • Worker availability
  • Leader가 처리해야 하는 병목
  • NUMA, memory bandwidth, storage saturation

Worker 수를 늘려도 storage나 memory bandwidth가 먼저 포화되면 개선되지 않습니다. 단일 query latency와 전체 throughput을 함께 측정합니다. Parallel query가 다른 workload의 CPU를 빼앗는 부작용도 관찰합니다.