본문 바로가기

Database/GPDB with BIG_data

[GPDB] greenplum sql 튜닝 파라미터 정리 (쿼리 튜닝 parameter)

#greenplum sql 튜닝 파라미터 정리 (쿼리 튜닝 parameter)

 

안녕하세요.

 

greenplum database는 오라클처럼 힌트를 사용할 수 없습니다.

 

그렇다고 느린 쿼리 성능을 그냥 GPORCA 가 시키는 데로 쿼리가 수행되게끔 둘 수는 없죠.

 

gpdb의 파라미터값을 조절하여 쿼리의 성능을 향상할 수 있습니다.

 

아래에 정리 되어 있는 파라미터 값을 참고하여 최적의 성능으로 GPDB를 사용하세요.

 

- gp_workfile_compress_algorithm=none # default 값은 none 이며, zlib 일 경우에는 pgsql_tmp 사용 시
압축 모드로 사용하기 때문에 동시 사용자수가 높을 경우에 적용할 필요가 있음.


- statement_mem # default 값은 125MB이며, 2GB까지 설정 가능하나, 안정적인 측면에서
1900MB까지 적용 가능
     * 대용량 쿼리일 경우 1900MB 까지 높이는 것이 성능 향상
     * OLTP 성과 같이 short 쿼리일 경우 32MB으로 낮추는 것이 성능 향상


- random_page_cost : default 값은 1000이며, 인덱스를 사용하기 위해서는 0, 1으로 세팅하여, Index
Scan을 유도


- enable_nestloop : default 값은 off이며, nestloop join 이 필요할 경우 on으로 설정


- join_collapse_limit : default 값은 20이며, 조인이 많을 경우 성능 지연 현상 발생, 플랜 생성 시 많은
시간이 소요. 쿼리 플랜 작성 시 파라미터 값을 8부터 1 씩 증가시키면서 플랜 생성 소요시간이 갑자기
많이 드는 값을 기준으로 설정하면 대부분 맞음.. 쿼리 cost 가 처음으로 낮아지는 값


- gp_external_max_segs : default 64, 작은 테이블 로딩이 많을 경우 16 또는 32으로 줄임, 작은
사이즈가 많을 경우 초기 로딩 속도를 줄이기 위함, 대용량 데이터를 적재하기 위해서는 128 또는
상향으로 늘림.


- gp_connections_per_thread : default 64, Short 쿼리 수행 속도를 올리기 위해서는 1로 내림, 숫자가
낮을수록 마스터 노드의 리소스를 더 많이 사용하며, Database 설정보다는 유저별 설정을 권고


- gp_vmem_idle_resource_timeout :  default 18 초, 세션 레벨에서 메모리 누적으로 발생되어, Out of
Memory 가 발생되는 경우, 1ms로 줄임. (세그먼트 노드의 리소스 Free 하기 위한 시간)


Set enable_nestloop = on; # Default 설정은 hash이며, nestloop는 off로 되어 있음.