본문 바로가기

Database/Greenplum

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

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
반응형