728x90
반응형
Greenplum의 분산키를 적용한 테이블을 운영하다 보면 예상과 달리 분산도가 안좋게 데이터가 쌓이고 있는 경우가 발생한다.
Greenplum은 노드의 인스턴스들의 데이터가 균등하여야 성능을 최대치로 활용할 수 있도록 설계되어 있기 때문에 분산키를 재조정하여 세그먼트 인스턴스에 데이터를 골고루 분배하도록 하자.
0. 분산도 확인
-- gp_segment_id 로 확인
select gp_segment_id
, count(*) as cnt
from 스키마.테이블
group by gp_segment_id
order by gp_segment_id
-- 노드 hostname 으로 확인
select b.hostname
, count(*) as cnt
from 스키마.테이블 a
, pg_catalog.gp_segment_configuration b
where a.gp_segment_id = b.dbid
and b.content != -1
group by b.hostname
order by b.hostname asc
1. 분산키 속성 변경
-- 방식1. 분산키 - 컬럼명을 지정
alter table 스키마.테이블명 set distributed by (컬럼명1, 컬럼명2, ...);
-- 방식2. 분산키 - randomly 로 지정
alter table 스키마.테이블명 set distributed randomly;
alter table 명령어로 분산키 속성을 변경할 수 있다. 변경 후 새로 생성되는 데이터는 새로지정한 분산키로 데이터가 새로 생성 되지만 기존에 등록되어 있던 데이터는 변경되지 않는다.
기존의 데이터까지 분산키에 따라 데이터를 재조정하려면 reorganize=true 를 실행해 주어야 한다.
<유의사항>
- 분산키를 조정하려는 테이블에 PRIMARY KEY 또는 UNIQUE INDEX 가 적용되어 있다면 제약조건을 삭제하고 분산키 재조정 후 다시 적용하여야 한다.
- PK/UK 가 적용되어 있는 테이블에 분산키 재조정 명령어를 실행하면 SQL ERROR [22023] 이 발생할 것이다.
SQL Error [22023]: ERROR: UNIQUE INDEX and DISTRIBUTED BY definitions incompatible
Hint: The DISTRIBUTED BY columns must be a subset of the UNIQUE INDEX columns.
2. 분산키 설정을 기준으로 데이터 재조정
-- 데이터 재조정
alter table 스키마.테이블 set with (reorganize=true);
데이터 재조정시 노드의 리소스를 많이 사용하니 자원사용량이 낮을때 적용하는 것을 추천한다.
<끝>
728x90
반응형
'Database > Greenplum' 카테고리의 다른 글
RefCursor를 이용하여 Multiple Results(다중 결과 데이터) Function 개발 (0) | 2021.07.07 |
---|---|
[Greenplum] Function 개발 및 디버깅을 위한 RAISE 로깅 사용방법 (0) | 2021.06.18 |
Greenplum ETL도구 소개 (0) | 2021.03.14 |
Greenplum 7 RoadMap - 예상기능정리 (0) | 2021.03.05 |
Greenplum 6.14에서 ORCA(query optimizer) 성능향상 (0) | 2021.02.17 |