안녕하세요.
postgres 9.6에서 병렬 처리기능이 추가가 되어 테스트 해본 내용을 같이 공유하고자 합니다.
우선 parallel 시, 직접적인 영향을 미치는 파라미터는 아래와 같습니다.
§min_parallel_relation_size (integer)
ü병렬 스캔을 하기 위해 고려해야 할 관계들의 최소 사이즈를 설정
ü기본값은 8MB
§max_parallel_workers_per_gather (integer) -- beta1에서는 degree 라는 parameter명
üSingle Gather Node에서 시작되는 처리기들의 최대 수를 설정
ü병렬 처리기들은 max_worker_processes에 의해 측정된프로세스 풀에서 가져옵니다.
ü기본 설정은 2 입니다. 0은 Parallel 옵션을 끕니다.
§parallel_setup_cost (floating point)
üparallel worker process가 작업 할 때 사용하는 비용의 추정값
ü기본값은 1000
§parallel_tuple_cost (floating point)
üparallel work process가 다른 process로 튜플을 전송 할 시 발생하는 비용의 추정값
ü기본값은 0.1
위 옵션에 따라 parallel degree가 유동적으로 결정됩니다.
* 주의하실점은 Nested Loop, Hash Join 일 경우에만 parallel 작업을 하게 됩니다.
아래는 parallel 설정을 하고, hash_join을 하였을 때 나온 병렬 작업 모니터링입니다.
pid 33517에 해당하는 작업을 44920~44924 이 parallel 하게 지원해주는것을 볼 수 있습니다.
해당 테스트는 1천만건의 데이터와 5백만건의 데이터를 join 한 SQL 입니다.
merge_join 일 경우는 5초대, hash_join으로 2초대 결과값을 가지고 오네요.
내년이 기다려집니다. :)