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를 빼앗는 부작용도 관찰합니다.