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 |