728x90
3. 성능 개념
3.1 Query Profile의 사용 방법에 대해 설명하기
Query Profile은 Snowflake에서 쿼리 성능을 모니터링하고 분석하는 데 중요한 도구로, 쿼리의 실행 계획, 데이터 처리 방식, 캐시 사용 등을 확인하고 성능을 최적화할 수 있습니다. 이를 통해 성능 저하의 원인을 파악하고 개선점을 발견할 수 있습니다.
1) 실행 계획 (Execution Plan)
- 설명: Query Profile의 실행 계획은 쿼리의 각 단계별 작업 방식과 소요 시간을 시각적으로 보여주는 구조로, 쿼리가 수행되는 과정을 이해하는 데 중요한 정보입니다.
- 기능: 실행 계획을 통해 특정 쿼리가 데이터에 접근하고 처리하는 방식을 파악하여, 쿼리 단계별 성능 문제를 진단할 수 있습니다. 실행 계획을 분석하여 데이터 스캔의 최적화, 필터 조건 개선, 불필요한 조인 제거 등으로 성능을 향상할 수 있습니다.
- 활용: 실행 계획에서 병목 구간을 식별하고, 적절한 인덱싱 및 필터 조건을 추가하여 실행 시간을 줄일 수 있습니다. 예를 들어, 비효율적 조인 방식이나 필터 조건의 문제를 발견하여 수정하면 성능이 개선될 수 있습니다.
2) 데이터 스필링 (Data Spilling)
- 설명: 데이터 스필링은 메모리가 부족해 데이터가 디스크로 이동하여 처리되는 현상입니다. 스필링이 발생하면 디스크의 느린 입출력 속도로 인해 성능이 저하됩니다.
- 기능: Query Profile은 데이터 스필링이 발생하는 위치와 스필링의 양을 시각화하여 보여줌으로써 성능 저하의 원인을 파악할 수 있습니다.
- 활용: 스필링이 자주 발생할 경우, 가상 웨어하우스 크기를 확장하여 메모리를 늘리거나 쿼리 구조를 최적화하여 메모리 사용을 줄일 수 있습니다. 예를 들어, 더 작은 데이터셋을 처리하도록 쿼리를 개선하거나 필터 조건을 추가하여 스필링을 줄일 수 있습니다.
3) 데이터 캐시의 사용 (Data Caching)
- 설명: Snowflake는 메타데이터 캐시, 결과 캐시, 웨어하우스 캐시를 통해 데이터를 재사용하여 쿼리 성능을 최적화합니다.
- 기능: Query Profile에서 각 쿼리가 어느 캐시 유형을 사용했는지 확인할 수 있으며, 캐시를 통해 쿼리 재실행 시 성능을 높일 수 있습니다.
- 활용: 쿼리의 재사용 가능성을 고려하여 캐시 사용을 최적화하고, 자주 실행되는 쿼리에 대해서는 캐시 활용을 통해 리소스 사용량을 줄일 수 있습니다. 예를 들어, 결과 캐시를 활용하면 동일한 결과가 필요한 반복적인 쿼리에서 성능을 크게 향상시킬 수 있습니다.
4) 마이크로 파티션 가지치기 (Micro-Partition Pruning)
- 설명: 마이크로 파티션 가지치기는 불필요한 데이터 접근을 줄이는 최적화 기법으로, 특정 조건에 맞지 않는 데이터 파티션을 자동으로 제외하여 쿼리 성능을 높입니다.
- 기능: Query Profile에서 가지치기된 파티션 수를 확인하여, 쿼리가 필요한 데이터에만 접근했는지 파악할 수 있습니다. Snowflake는 자동으로 조건에 맞지 않는 파티션을 제거하여 성능을 최적화합니다.
- 활용: WHERE 조건을 구체화하고 필터링 조건을 명확히 하여 가지치기를 최대화하면, 불필요한 데이터 스캔을 줄여 쿼리 성능을 개선할 수 있습니다. 예를 들어, 날짜 범위를 설정하거나 특정 값으로 필터링하면 가지치기 효과가 극대화됩니다.
5) 쿼리 기록 (Query History)
- 설명: Query History는 쿼리 실행 내역과 성능 데이터를 저장하여 관리하는 기능입니다. 각 쿼리에 대한 성능 메트릭과 실행 시간을 기록해 쿼리의 최적화에 활용할 수 있습니다.
- 기능: Query History는 실행 시간, 단계별 리소스 사용량, 성능 정보를 기록하여 쿼리 성능을 분석할 수 있습니다.
- 활용: 자주 사용되는 쿼리의 성능을 모니터링하고, 리소스 사용 효율을 최적화할 수 있습니다. 이력을 분석해 자주 사용되는 쿼리를 Materialized View로 전환하거나 쿼리 구조를 개선할 수 있습니다.
3.2 가상 웨어하우스 구성에 대해 설명하기
가상 웨어하우스는 Snowflake의 데이터 처리와 쿼리 실행을 담당하는 컴퓨팅 자원입니다. 적절한 가상 웨어하우스 구성을 통해 성능과 비용을 최적화할 수 있습니다.
1) 웨어하우스의 유형
- 설명: Snowflake의 가상 웨어하우스는 단일 클러스터와 멀티 클러스터로 구성할 수 있으며, 각 유형은 워크로드에 따라 선택됩니다.
- 기능:
- 단일 클러스터 웨어하우스: 단일 컴퓨팅 리소스로 구성되어 일반적인 데이터 처리 작업에 적합합니다.
- 멀티 클러스터 웨어하우스: 동시성이 높은 워크로드에 적합하며, 자동으로 클러스터를 확장하여 성능을 최적화할 수 있습니다.
- 활용: 다중 사용자나 대규모 데이터 처리를 지원할 때 멀티 클러스터 웨어하우스를 사용하여 성능을 높이고, 특정 작업에는 단일 클러스터를 사용하여 비용을 절감할 수 있습니다.
2) 멀티 클러스터링 웨어하우스
- 설명: 멀티 클러스터 웨어하우스는 작업량에 따라 클러스터 수를 자동으로 조정하여 확장 및 축소할 수 있습니다.
- 규모 조정 정책:
- 자동화 정책: 사용량 증가 시 자동으로 클러스터를 추가하고, 작업 부하가 줄어들면 자동으로 축소하여 비용과 성능을 최적화합니다.
- 고정 정책: 필요한 클러스터 수를 고정하여 작업 부하에 관계없이 일정한 성능을 유지합니다.
- 규모 조정 모드:
- 자동 모드: Snowflake가 작업 부하에 맞춰 클러스터 수를 자동 조정합니다.
- 수동 모드: 관리자가 직접 클러스터 수를 설정하여 작업 부하에 맞춰 성능을 조절할 수 있습니다.
- 활용: 동시성 높은 작업이나 예산에 따라 자동 모드 또는 수동 모드를 선택하여 성능을 최적화하고, 리소스를 효율적으로 관리할 수 있습니다.
3) 웨어하우스의 크기 조정
- 설명: 가상 웨어하우스의 크기는 XS부터 6XL까지 선택 가능하며, 처리해야 할 데이터와 작업 크기에 따라 조정할 수 있습니다.
- 기능: 웨어하우스 크기가 커질수록 컴퓨팅 성능이 향상되어 대규모 데이터를 처리하는 데 적합합니다.
- 활용: 빈번한 대용량 데이터 처리가 필요하거나 긴 쿼리를 빠르게 처리하려면 큰 웨어하우스를 사용하여 성능을 극대화할 수 있습니다. 웨어하우스 크기를 적절히 조정하여 비용과 성능 간의 균형을 유지할 수 있습니다.
4) 웨어하우스의 설정 및 액세스
- 설명: Snowflake에서는 가상 웨어하우스 설정을 통해 성능을 제어할 수 있으며, 필요한 작업에 맞게 사용자 접근 권한을 설정할 수 있습니다.
- 기능: 웨어하우스 크기, 클러스터 수, 자동 일시 중지 및 재개 설정 등을 통해 성능과 비용을 최적화합니다.
- 활용: 관리자는 작업 부하에 따라 웨어하우스를 자동으로 일시 중지하거나, 사용량을 조절하여 최적의 성능을 유지하면서 비용을 절감할 수 있습니다.
3.3 가상 웨어하우스 성능 도구에 대해 간략히 설명하기
Snowflake는 다양한 성능 도구를 통해 가상 웨어하우스 성능을 모니터링하고 최적화할 수 있습니다.
1) 웨어하우스 로드 모니터링
- 설명: 웨어하우스 로드 모니터링을 통해 각 웨어하우스의 리소스 사용량과 작업 부하를 실시간으로 확인할 수 있습니다.
- 기능: 웨어하우스가 과부하 상태인지, 추가 리소스가 필요한지 판단할 수 있으며, 필요한 경우 자동 확장을 통해 리소스 사용을 최적화합니다.
- 활용: 작업 부하가 높은 시점에 추가 클러스터를 활성화하여 성능을 유지하고, 작업량이 적을 때는 축소하여 비용을 절감할 수 있습니다.
2) 수직 확장 vs. 수평 확장
- 설명: 수직 확장과 수평 확장은 가상 웨어하우스의 성능을 조정하는 두 가지 주요 방식입니다.
- 기능:
- 수직 확장: 웨어하우스 크기를 조정하여 더 큰 단일 리소스를 사용해 성능을 높입니다.
- 수평 확장: 클러스터 수를 늘려 동시에 더 많은 쿼리를 처리할 수 있도록 하여, 높은 동시성을 지원합니다.
- 활용: 대용량 데이터 처리는 수직 확장을, 다중 사용자 접근과 동시 작업에는 수평 확장을 통해 성능을 최적화할 수 있습니다.
3) 리소스 모니터
- 설명: 리소스 모니터는 가상 웨어하우스의 리소스 사용량을 추적하고 예산을 관리할 수 있는 도구입니다.
- 기능: 리소스 모니터는 사용량이 설정한 예산을 초과할 때 알림을 보내고, 리소스 과다 사용을 방지할 수 있습니다.
- 활용: 예산 내에서 리소스 사용을 관리하여 비용을 절감하고, 성능을 유지할 수 있습니다.
4) Query Acceleration Service
- 설명: Query Acceleration Service는 Snowflake에서 복잡한 쿼리를 자동으로 가속화하여 성능을 향상시킵니다.
- 기능: 자동으로 리소스를 더 할당하여 복잡한 쿼리를 빠르게 처리하며, 성능 최적화를 위해 가상 웨어하우스 자원을 더 많이 할당합니다.
- 활용: 대규모 데이터 쿼리를 수행할 때 성능을 최적화하고, 사용자는 설정을 통해 가속화 서비스를 활성화하여 빠른 쿼리 처리를 지원받을 수 있습니다.
3.4 쿼리 성능 최적화하기
쿼리 성능 최적화는 Snowflake에서 데이터 접근과 처리 효율성을 높이는 핵심 작업입니다.
1) Materialized View의 사용 방법에 대해 설명하기
- 설명: Materialized View는 자주 사용되는 쿼리 결과를 미리 저장하여 성능을 최적화할 수 있는 뷰입니다.
- 기능: 복잡한 쿼리를 사전에 저장하여 성능을 높이며, 데이터 변경 시 자동으로 업데이트됩니다.
- 활용: 반복적인 쿼리 작업이 필요한 경우 Materialized View를 통해 빠른 응답을 얻을 수 있습니다. 자주 조회되는 데이터 분석과 보고서 생성에 유용합니다.
2) 특정 SELECT 명령 사용하기
- 설명: WHERE, GROUP BY, ORDER BY 등의 SELECT 명령을 사용하여 불필요한 데이터 접근을 줄임으로써 성능을 최적화할 수 있습니다.
- 기능: 필요한 데이터만 효율적으로 조회할 수 있어, 불필요한 리소스 사용을 줄입니다.
- 활용: 특정 열만 조회하거나 데이터 범위를 지정하여 쿼리 성능을 최적화할 수 있습니다.
3) 클러스터링
- 설명: Snowflake의 데이터 클러스터링은 데이터 열을 기준으로 데이터를 정렬하여 쿼리 성능을 향상시킵니다.
- 기능: 데이터의 특정 열을 기준으로 정렬하여 필터링 시 성능을 최적화하고, 필요한 데이터만 빠르게 접근할 수 있습니다.
- 활용: 대량의 데이터에서 특정 범위나 조건으로 조회할 때 클러스터링을 통해 빠른 데이터 접근이 가능합니다.
4) Search Optimization Service
- 설명: Search Optimization Service는 대규모 데이터셋에서 검색 속도를 높이는 Snowflake의 성능 최적화 도구입니다.
- 기능: 데이터를 효율적으로 검색하여 특정 데이터 조회를 빠르게 할 수 있습니다.
- 활용: 정렬되지 않은 대용량 데이터에서 검색 작업이 많을 때 사용하여 성능을 크게 향상시킬 수 있습니다.
5) Persisted Query Result
- 설명: Persisted Query Result는 이전에 실행된 쿼리 결과를 저장하여 동일한 쿼리 재실행 시 더 빠르게 결과를 반환하는 기능입니다.
- 기능: 쿼리 결과를 캐시해두어 반복 쿼리 시 성능을 높이고, 비용을 절감할 수 있습니다.
6) 서로 다른 캐시의 영향도에 대한 이해
- 메타데이터 캐시: 쿼리 메타데이터를 캐싱하여 쿼리 컴파일 및 최적화 시간을 단축합니다.
- 결과 캐시: 동일한 쿼리의 실행 결과를 캐싱하여, 재실행 시 빠르게 반환합니다.
- 웨어하우스 캐시: 가상 웨어하우스가 데이터를 캐싱하여, 동일한 데이터 접근 시 성능을 향상시킵니다.
Reference
https://docs.snowflake.com/ko/guides
728x90
'Snowflake' 카테고리의 다른 글
[Snowflake] Snowflake SnowPro Core 시험 Cheat Sheet 5 (데이터 변환) (2) | 2024.10.29 |
---|---|
[Snowflake] SnowPro Core 시험 Cheat Sheet 4(데이터 로드 및 언로드) (2) | 2024.10.29 |
[Snowflake] SnowPro Core 시험 Cheat Sheet 2 (계정 액세스 및 보안) (0) | 2024.10.27 |
[Snowflake] SnowPro Core 시험 Cheat Sheet 1 (Snowflake 데이터 클라우드의 기능 및 아키텍처) (0) | 2024.10.26 |
[Snowflake] Snowflake Secure Data Sharing 이해 및 사용하기 (0) | 2024.10.25 |