Greenplum

Greenplum - Fundamental Concepts

n.han 2019. 12. 10. 10:22

GP DB 관련 좋은 참고용 Blog: http://gpdbkr.blogspot.com/

- Greenplum Fundamental Concepts

Greeplum Architecture

세상에 흐르는 데이터 양이 많아 지고 있다. 따라서 이를 처리할 수 있는 데이터베이스 서버의 성능을 올리는 것이 필요한데, GP에선 성능을 올리는 기본적인 방식인 Scale up(서버의 CPU 성능을 올리는 것과 같은)이 있지만 Scale out(병렬 Segment를 늘리는 것과 같은)도 있다. GP는 Master, Standby, 그리고 여러 Segment들로 구성된 구조다. Segment들을 적극적으로 활용하기 위해서, 데이터들이 적절하게 분배되도록 하는 것이 중요하다. Master는 시스템의 진입점이다. 모든 사용자의 연결을 관리하고, 쿼리 플랜을 만든다. Master에는 사용자 데이터가 없다.  각 Segment들은 여러 Segment Instance들로 나눠진다. 쿼리가 들어오면 Master의 Parser - Query Optimizer - Query Dispatcher - Query Executor -> Interconnect를 통해 Segment 간 데이터가 이동 -> Segment의 Query Executor가 실행된다. Master가 Query Optimizer, Dispatcher를 할 때 각 Segment에 있는 Catalog 정보를 가지고 있기 때문에 이를 참조한다.

High Availability

HA를 지원하기 위해 Warm standby, Segment Mirroring(RAID 구성) 기능을 제공한다. Standby는 주기적으로 Master의 System catalogs, Transaction logs들을 Mirroring한다. Segment Mirroring 방식, RAID 구성은 GP Install시 결정할 수 있다. Master Fail시, M -> S 전환까지 얼마나 걸릴까? M -> S 간 데이터 Sync 작업 주기는 얼마일까? Segment Host나 Segment Instance가 죽으면, 자동으로 이를 감지하고 Recovery하는지? Master Fail시 M -> S 전환까지 3~5분이면 된다고 한다. 다만 자동 전환되는 Script 작업이 있어야 한다. M -> S 간 데이터 Sync 작업은 실시간으로 발생한다고 보면 된다.

Useful Commands

  1. Reload GP Configurations: gpstop -u
  2. Check the status of GP: gpstate / SELECT * FROM gp_segment_configuration
  3. 데이터 Skew 정도 확인: select '테이블이름' tb_nm, gp_segment_id, count(*) from    group by gp_segment_id order by 2;
  4. 데이터 Skew 정도 한눈에 확인: SELECT '테이블이름' tb_nm, sum(row_count) t_cnt, Avg(Row_Count) avg_cnt, max(Row_Count) max_cnt,(1-(Avg(Row_Count)/Max(Row_Count)))*100 as Skew_Pct FROM (SELECT gp_segment_id, count(*) as Row_Count FROM 테이블이름  GROUP BY gp_segment_id ) A; 
  5. gpscp는 한 host에서 여러개의 다른 host들로 파일을 한번에 보낼 때 활용하는 프로그램이다.. hostfile_gpssh에 모든 host들 목록이 있을 때,
    gpscp -f hostfile_gpssh .bashrc = :/home/gpadmin
    와 같이 활용하면 된다.
  6. gpssh는 명령어를 여러개의 host에 동시에서 실행하는 프로그램이다.
    gpssh -f hostfile_gpssh -v -e df -h
    와 같이 활용하면 된다.

PSQL 옵션

  1. psql 데이터베이스이름
  2. psql 데이터베이스이름 -ac "쿼리;"
  3. psql 데이터베이스이름 -af ".sql 파일"
    (sql 파일 안의 쿼리에서 하나가 문제가 생겨도 계속 진행된다. 옵션을 줘서 한 쿼리에 문제가 발생하면 더 진행하지 않도록 할 수 있다.)

PSQL Tips

psql을 -o 옵션을 활용해서, 파일로 데이터를 unloading할 수 있다. 다만 많은 데이터를 unloading하기에는 적절하지 않는데, master로 데이터들이 모아져야 하기 때문이다. 각 Segment들로 직접 접근해서 데이터를 unloading하는게 훨씬 효율적이다. 또한 \timing을 .psqlrc에 넣어두면 쿼리 소요 시간을 알 수 있다. 또한 shell에서 psql 결과를 변수에 할당하고, 이를 echo해서 매일 동작하는 작업의 소요 시간을 로그파일를 통해 알 수 있다.

Roles and Privileges

사용자는 Users, Super Users로 구분되어 있다. 기본적으로 User를 생성하면 Default 권한이 주어지기 때문에, 따로 권한 관련되어 수정 할 필요는 없다. 필요하다면 Group Roles가 있어서, 각 Group Roles에는 권한 SET을 설정할 수 있고 해당 Group에 속한 사용자는 속한 Group Roles의 권한이 부여된다.

Host Base Authentication

pg_hba.conf로 사용자 Authentication을 할 수 있다. pg_hba.conf 파일을 수정하게 되면, gpstop -u 명령으로 이를 DB에 반영해야 한다. 다만 이 명령은 database를 멈추는 것이 아니라, 세팅을 새로 반영하는 것 이다. IP 대역별로 접속할 수 있는 사용자들을 관리할 수 있긴 하지만, 그렇게 하는 것은 권장하지 않는다.

'Greenplum' 카테고리의 다른 글

Greenplum - Backup and Recovery  (0) 2019.12.13
Greenplum - Data manipulations  (0) 2019.12.13
Greenplum - Loading Data  (0) 2019.12.13
Greenplum - DDL  (0) 2019.12.13