Immersion In Data

Snowflake/Snowflake - The Complete Masterclass

[Snowflake] Performance optimization

sungjunminn 2023. 2. 3. 16:39

1. Performance in Snowflake


목적 : 쿼리 성능 최적화, 비용 절감
Snowflake에서 성능을 최적화하는 방법 : 마이크로 파티션을 자동적으로 관리

 

  • 특정 사용자 그룹을 위한 전용 웨어하우스 생성 : 서로 다른 워크로드에 따라 분리
  • Scaling Up : 이미 알고있는 패턴의 많은 워크로드를 위한 작업
  • Scaling Out : 워크로드의 패턴을 알 수 없는 상태인 동적 작업
  • 최대 캐시 사용 : 자동 캐싱 최대화
  • 클러스터 키 : 사이즈가 큰 테이블을 위한 작업

 



cf) 전통적인 성능 최적화 방법

  • 인덱스, PK 추가
  • 테이블 파티션 생성
  • 쿼리 실행 테이블 계획 분석
  • 불필요한 전체 테이블 스캔 제거

 




2. Create dedicated virtual warehouse


사용자 그룹 또는 워크로드 식별 및 분류
전용 가상 웨어하우스 생성

 


cf) 고려할 점 

  • 너무 많은 가상 웨어하우스 생성하지 않아야 함
  • 분류를 세분화해야함 

 



3. Implement dedicated virtual warehouse

  • data scientist용 웨어하우스 생성
CREATE WAREHOUSE DS_WH 
WITH WAREHOUSE_SIZE = 'SMALL'
WAREHOUSE_TYPE = 'STANDARD' 
AUTO_SUSPEND = 300 
AUTO_RESUME = TRUE 
MIN_CLUSTER_COUNT = 1 
MAX_CLUSTER_COUNT = 1 
SCALING_POLICY = 'STANDARD';

 

  •  DBA용 웨어하우스 생성

CREATE WAREHOUSE DBA_WH 
WITH WAREHOUSE_SIZE = 'XSMALL'
WAREHOUSE_TYPE = 'STANDARD' 
AUTO_SUSPEND = 300 
AUTO_RESUME = TRUE 
MIN_CLUSTER_COUNT = 1 
MAX_CLUSTER_COUNT = 1 
SCALING_POLICY = 'STANDARD';

 

  • data scientist용 role 생성 및 웨어하우스에 role 부여

CREATE ROLE DATA_SCIENTIST;
GRANT USAGE ON WAREHOUSE DS_WH TO ROLE DATA_SCIENTIST;

 

  • DBA용 role 생성 및 웨어하우스에 role 부여

CREATE ROLE DBA;
GRANT USAGE ON WAREHOUSE DBA_WH TO ROLE DBA;

 

  • data scientist 유저 생성

CREATE USER DS1 PASSWORD = 'DS1' LOGIN_NAME = 'DS1' DEFAULT_ROLE='DATA_SCIENTIST' DEFAULT_WAREHOUSE = 'DS_WH'  MUST_CHANGE_PASSWORD = FALSE;
CREATE USER DS2 PASSWORD = 'DS2' LOGIN_NAME = 'DS2' DEFAULT_ROLE='DATA_SCIENTIST' DEFAULT_WAREHOUSE = 'DS_WH'  MUST_CHANGE_PASSWORD = FALSE;
CREATE USER DS3 PASSWORD = 'DS3' LOGIN_NAME = 'DS3' DEFAULT_ROLE='DATA_SCIENTIST' DEFAULT_WAREHOUSE = 'DS_WH'  MUST_CHANGE_PASSWORD = FALSE;

 

  • data scientist 유저에게 role 부여

GRANT ROLE DATA_SCIENTIST TO USER DS1;
GRANT ROLE DATA_SCIENTIST TO USER DS2;
GRANT ROLE DATA_SCIENTIST TO USER DS3;

 

  • DBA 유저 생성

CREATE USER DBA1 PASSWORD = 'DBA1' LOGIN_NAME = 'DBA1' DEFAULT_ROLE='DBA' DEFAULT_WAREHOUSE = 'DBA_WH'  MUST_CHANGE_PASSWORD = FALSE;
CREATE USER DBA2 PASSWORD = 'DBA2' LOGIN_NAME = 'DBA2' DEFAULT_ROLE='DBA' DEFAULT_WAREHOUSE = 'DBA_WH'  MUST_CHANGE_PASSWORD = FALSE;

 

  • DBA 유저에게 role 부여

GRANT ROLE DBA TO USER DBA1;
GRANT ROLE DBA TO USER DBA2;

 

  • 생성한 유저, role, 웨어하우스 삭제

DROP USER DBA1;
DROP USER DBA2;

DROP USER DS1;
DROP USER DS2;
DROP USER DS3;

DROP ROLE DATA_SCIENTIST;
DROP ROLE DBA;

DROP WAREHOUSE DS_WH;
DROP WAREHOUSE DBA_WH;

 



4. Scaling Up/Down

웨어하우스의 크기를 늘림
더 복잡한 쿼리를 진행할 때 사용

 

  • 서로 다른 기간의 서로 다른 워크로드를 진행하는 경우
  • 특정시간에 ETL 작업을 진행하는 경우
  • 워크로드가 더 많은 특별한 비즈니스인 경우 



cf)일반적인 시나리오는 더 많은 사용자가 아닌 쿼리 복잡성 증가함

 



5. Scaling Out


추가 웨어하우스/멀티 클러스터 웨어하우스 사용
더 많은 동시 사용자가 있을 때 사용(동시성)

 

  • 많은 수의 동시 사용자와 관련된 작업을 수행
  • 사용자 수가 변동하는 경우 프로세스를 자동화함



cf) 고려할 점 

  • enterprise edition 이상을 사용하는 경우 모든 웨어하우스는 멀티 클러스터여야 함
  • minimum : default = 1
  • maximum : 거의 제한 없음

 




6. Caching

  • 쿼리 속도를 높이기 위해 자동 프로세스를 수행
  • 쿼리를 두 번 실행하면 결과가 캐시되고 다시 사용할 수 있음
  • 결과는 24시간 동안 또는 기본 데이터가 변경될 때까지 캐시됨

 




7. Clustering


cluster key  : 행의 부분 집합을 선택하여 데이터를 micro-partition으로 찾음, 대형 테이블의 경우 쿼리에서 검색 효율성이 향상됨

 

  • Snowflake는 자동으로 cluster key를 유지함
  • 일반적으로 Snowflake는 잘 정리된 테이블을 만듦
  • cluster key가 항상 이상적인 것은 아니며 시간이 지남에 따라 변경될 수 있음
  • 클러스터링은 모든 테이블을 위한 것은 아님
  • 주로 여러 테라바이트의 매우 큰 테이블에 적용할 때 유리함
  • where 절에서 가장 자우 사용되는 열을 사용
  • 일반적으로 두 열에 필터를 사용하는 경우 테이블은 두 개의 cluster key의 이점을 얻을 수 있음
  • 조인에 자주 사용되는 열을 사용
  • 효과적인 그룹화를 가능하게 하기에 충분히 큰 고유 값
  • 효과적인 그룹화가 가능할 정도로 고유한 값의 수가 적음







    Udemy의 'Snowflake - The Complete Masterclass (2023 Edition)'를 공부한 내용을 바탕으로 작성하였습니다. 

'Snowflake > Snowflake - The Complete Masterclass' 카테고리의 다른 글

[Snowflake] Snowpipe  (0) 2023.02.07
[Snowflake] Loading from AWS  (0) 2023.02.06
[Snowflake] Loading unstructured data  (0) 2023.02.02
[Snowflake] Copy options  (0) 2023.02.01
[Snowflake] Loading data  (0) 2023.01.30