max_worker_processes : 시스템이 지원할 수 있는 최대 백그라운드 프로세스의 수. Standby 서버에 해당 파라미터를 설정 시에는 Primary 서버보다 크거나 같은 값을 설정해주어야 함.
max_parallel_workers : 병렬 작업에 사용될 수 있는 최대 worker 수를 설정. 해당 값을 변경할 때에는 병렬 처리와 관련된 파라미터들을 같이 수정해주어야 함. (max_parallel_workers_per_gather 등)
max_parallel_workers_per_gather : 하나의 parallel 프로세스가 생성 할 수 있는 worker 수
max_parallel_maintenance_workers : vaccum, index 생성과 같은 작업을 내부적으로 parallel로 수행할 때 최대 worker 개수
parallel_setup_cost : parallel worker process가 작업 할 때 사용하는 비용의 추정값
parallel_tuple_cost : 병렬 작업 프로세스가 다른 프로세스에게 하나의 튜플을 전송하는 플래너의 비용 추정치. (조건절 없을때 패러럴 처리할 경우 작게 해야 함)
min_parallel_table_scan_size : parallel scan을 위한 테이블 데이터 최소 양
min_parallel_table_scan_size : parallel scan을 위한 인덱스 데이터 최소 양
force_parallel_mode : parallel을 강제 (하지만 더 적은 코스트가 아니면 강제되지 않음)
아래와 같은 paralle 시 발생하는 cost 및 최소 데이터를 0으로 설정하여 parallel을 유도
SET parallel_setup_cost to 0 ;
SET parallel_tuple_cost to 0 ;
SET min_parallel_table_scan_size to 0 ;
SET min_parallel_index_scan_size to 0 ;
SET max_parallel_workers_per_gather to DEFAULT ;
parallel_leader_participation : 만약 Queue를 모두 순회했지만 모든 Parallel Worker가 결과물을 전달하지 않았다면 Leader Worker에게는 두 가지 선택이 주어집니다. 첫 번째는 Leader Worker 본인이 직접 자식 실행 계획을 수행하여 결과물을 만들어 내는 것입니다. 두 번째는 Parallel Worker 중 하나라도 먼저 끝내는 Worker가 생길 때까지 대기하는 방법
set parallel_leader_participation TO 0;
SET parallel_setup_cost = 100; -- 패러럴 시작 코스트 변경
SET force_parallel_mode = on; -- 패러럴 강제(하지만 더 적은 코스트가 아니면 강제되지 않음)
SET parallel_tuple_cost = 0.0001; -- 패러럴 튜플 코스트 변경(조건절 없을때 패러럴 처리할 경우 작게 해야 함)
SET max_parallel_workers_per_gather = 32;
SET max_parallel_maintenance_workers TO 16;
SET maintenance_work_mem TO '30 GB';