max_parallel_workers_per_gather
| 버전 | 기본값 | context | 타입 |
|---|---|---|---|
| 14 | 2 | user | integer |
| 15 | 2 | user | integer |
| 16 | 2 | user | integer |
| 17 | 2 | user | integer |
| 18 | 2 | user | integer |
| 19 | 2 | user | integer |
Gather 또는 Gather Merge 노드 하나가 시작할 수 있는 worker 수의 상한을 정한다. 즉 쿼리 하나의 병렬 실행에 붙는 parallel worker 수를 제어한다. 기본값은 2이고, 0으로 설정하면 parallel query 자체가 꺼진다.
parallel worker는 max_worker_processes가 만든 프로세스 풀에서 가져오며 max_parallel_workers의 제약도 받는다. 실행 시점에 풀에 여유가 없으면 계획한 수보다 적은 worker로 실행되고, 그만큼 비효율이 생길 수 있다.
parallel query는 병렬이 아닌 쿼리보다 자원을 훨씬 많이 쓸 수 있다는 점을 염두에 둬야 한다. worker 프로세스는 각각 완전히 독립된 프로세스라 시스템에 주는 부하가 세션 하나가 추가된 것과 비슷하다. work_mem 같은 자원 한도도 worker마다 개별 적용되므로, worker 4개를 쓰는 쿼리는 병렬 없이 도는 쿼리보다 CPU·메모리·I/O를 최대 5배까지 쓸 수 있다.
운영 노트: 이 값을 올리기 전에
work_mem과 동시 세션 수를 함께 계산해야 한다. OLTP 위주 시스템에서 무턱대고 올리면 피크 시간에 CPU와 메모리가 병렬 쿼리에 잠식될 수 있다. 분석 쿼리가 특정 세션에 몰린다면 세션 단위 SET으로 올리는 방법이 안전하다.출처: PostgreSQL 18 문서