Database/Greenplum

Greenplum 테이블의 분산키를 변경하는 방법

정리하는개발자 2021. 4. 20. 22:41
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
반응형
댓글수0