성능에 맞춰 저장소 최적화하기

이 항목에서는 유사한 데이터를 함께 저장하고, 최적화된 데이터 구조를 만들고, 특수 데이터 세트를 정의하는 등 쿼리 성능을 개선할 수 있는 저장소 최적화에 대해 설명합니다. Snowflake는 자동 클러스터링, 검색 최적화, 구체화된 뷰의 세 가지 저장소 전략을 제공합니다.

일반적으로, 이러한 저장소 전략으로 이미 1초 이하의 시간에 실행되는 쿼리의 성능이 크게 개선되는 것은 아닙니다.

이 항목에서 설명하는 전략은 쿼리 성능을 높이는 한 가지 방법일 뿐입니다. 쿼리 실행에 사용되는 컴퓨팅 리소스와 관련된 전략은 성능을 위한 웨어하우스 최적화하기 섹션을 참조하십시오.

저장소 전략 소개

자동 클러스터링

Snowflake는 테이블의 데이터를 마이크로 파티션 에 저장합니다. 이러한 마이크로 파티션 중에서 Snowflake는 데이터 차원을 기준으로 데이터를 구성(즉, 클러스터링)합니다. 쿼리가 그와 같은 차원을 따라 필터링, 조인 또는 집계하는 경우 결과를 반환하기 위해 검사해야 하는 마이크로 파티션 수가 줄어 쿼리 속도가 상당히 빨라집니다.

클러스터 키 를 설정하여 마이크로 파티션의 기본 구성을 변경하여 데이터가 특정 차원(즉, 열)을 중심으로 클러스터링되도록 할 수 있습니다. 클러스터 키를 선택하면 클러스터 키에 정의된 열을 기준으로 필터링, 조인 또는 집계하는 쿼리의 성능이 향상됩니다.

Snowflake에서는 자동 클러스터링을 사용하여 클러스터 키를 정의하는 즉시 테이블의 클러스터링을 유지할 수 있습니다. 자동 클러스터링이 활성화되면 새 데이터가 테이블에 추가될 때 마이크로 파티션을 업데이트합니다. 자세히 알아보기

검색 최적화 서비스

검색 최적화 서비스는 고도로 선택적인 필터를 사용하여 테이블에서 소수의 행을 반환하는 포인트 조회 쿼리(즉, “짚더미에서 바늘 찾기”)의 성능을 향상해 줍니다. 검색 최적화 서비스는 대기 시간이 짧은 포인트 조회 쿼리(예: 조사 로그 검색, 위협 또는 이상 감지, 선택적 필터가 있는 중요 대시보드)가 중요한 의미를 가질 경우에 이상적입니다.

검색 최적화 서비스는 특정 유형의 검색에 최적화된 영구 데이터 구조를 만들어 포인트 조회 쿼리의 대기 시간을 줄여줍니다.

전체 테이블 또는 특정 열에 대해 검색 최적화 서비스를 활성화할 수 있습니다. 충분히 선택 가능하다면 이러한 열에 대한 동일성 검색, 하위 문자열 검색, 지리 검색 의 속도를 상당히 높일 수 있습니다.

검색 최적화 서비스는 정형 데이터와 반정형 데이터를 모두 지원합니다(지원되는 데이터 타입 참조).

검색 최적화 서비스를 사용하려면 Snowflake Enterprise Edition 이상이 필요합니다. 자세히 알아보기

구체화된 뷰

구체화된 뷰는 나중에 사용하기 위해 저장되는 SELECT 문에서 파생된 미리 계산된 데이터 세트입니다. 데이터가 사전에 계산되므로 구체화된 뷰의 쿼리가 뷰가 정의된 기본 테이블에 대한 쿼리 실행보다 속도가 더 빠릅니다. 예를 들어 구체화된 뷰를 만들 때 SELECT SUM(column1) 을 지정하면 column1 이 이미 집계되었으므로 뷰에서 SUM(column1) 을 반환하는 쿼리가 더 빠르게 실행됩니다.

구체화된 뷰는 기본 테이블에 상대적으로 적은 수의 행 및/또는 열을 반환하는 공통적이고 반복되는 쿼리 패턴으로 구성된 워크로드에 대한 쿼리 성능을 개선하도록 설계되었습니다.

구체화된 뷰는 둘 이상의 테이블을 기반으로 할 수 없습니다.

구체화된 뷰를 사용하려면 Snowflake Enterprise Edition 이상이 필요합니다. 자세히 알아보기

최적화 전략 선택하기

다양한 유형의 쿼리에서 다양한 저장소 전략의 이점을 누립니다. 다음 섹션을 통해 워크로드에 가장 적합한 전략을 찾을 수 있습니다.

자동 클러스터링은 테이블의 동일한 열에 액세스하는 다양한 쿼리에 이익이 될 수 있는 가장 광범위한 옵션입니다. 관리자는 종종 빈도 및 대기 시간 요구 사항을 기준으로 가장 중요한 쿼리를 고른 다음 해당 쿼리의 성능을 최대화하는 클러스터 키를 선택합니다. 자동 클러스터링은 많은 쿼리가 소수의 동일한 열을 필터링, 조인 또는 집계할 때 의미가 있습니다.

검색 최적화 서비스와 구체화된 뷰는 범위가 더 좁습니다. 특정 쿼리가 테이블 데이터 중 잘 정의된 일부 데이터에 액세스할 때 관리자는 쿼리의 특성을 사용하여 검색 최적화 서비스 또는 구체화된 뷰를 사용하면 성능을 개선할 수 있는지 판단할 수 있습니다. 예를 들어 관리자는 중요한 포인트 조회 쿼리를 식별하고 테이블 또는 열에 대한 검색 최적화 서비스를 구현할 수 있습니다. 마찬가지로, 관리자는 구체화된 뷰를 만들어 특정 쿼리 패턴을 최적화할 수 있습니다.

테이블에 대해 이러한 전략을 둘 이상 구현할 수 있으며, 여러 필터를 사용하는 개별 쿼리가 자동 클러스터링과 검색 최적화 서비스의 이점을 모두 누릴 가능성이 있습니다. 하지만 검색 최적화 서비스를 사용하거나 클러스터링된 테이블에서 구체화된 뷰를 만드는 비용이 더 비쌀 수 있습니다. 이로 인해 컴퓨팅 비용이 증가하는 이유를 알아보려면 이 항목의 지속적인 비용 을 참조하십시오.

둘 이상의 전략이 특정 쿼리의 성능을 높여줄 가능성이 있는 경우 유사한 액세스 패턴을 가진 다른 쿼리도 개선할 수 있으므로 자동 클러스터링 또는 검색 최적화 서비스로 시작할 수도 있습니다.

구분 시 고려 사항

다음에 설명할 내용은 저장소 전략을 철저히 비교한 것이 아니라 이들 전략을 구분할 때 가장 중요한 고려 사항을 제시하는 것입니다.

자동 클러스터링:
  • 가장 큰 성능 향상은 클러스터 키의 열을 기준으로 필터링하는 WHERE 절에서 비롯되지만, 같은 열에서 작동하는 다른 절과 함수(예: 조인 및 집계)의 성능을 개선할 수도 있습니다.

  • 범위 쿼리 또는 부등식 필터가 있는 쿼리에 이상적입니다. 등식 필터도 개선되지만, 검색 최적화 서비스는 보통 포인트 조회 쿼리에 더 빠르게 작동합니다.

  • Snowflake Standard Edition에서 사용할 수 있습니다.

  • 클러스터 키는 하나만 있을 수 있습니다. [1] 한 테이블에 대해 서로 다른 쿼리가 서로 다른 열에 대해 작동하는 경우 검색 최적화 서비스 또는 구체화된 뷰를 대신 사용하는 것이 좋습니다.

검색 최적화 서비스:
  • 소수의 행 을 반환하는 포인트 조회 쿼리를 개선합니다. 쿼리가 몇 개 이상의 레코드를 반환하는 경우에는 대신에 자동 클러스터링을 사용해 보십시오.

  • 다음과 같은 포인트 조회 쿼리에 대한 지원을 포함합니다.

    • LIKE 및 RLIKE와 같은 조건자를 사용하여 하위 문자열 또는 정규식을 일치시키는 쿼리.

    • VARIANT, ARRAY 또는 OBJECT 열에서 특정 필드를 검색하는 쿼리.

    • GEOGRAPHY 값과 함께 지리 공간 함수를 사용하는 쿼리.

구체화된 뷰:
  • 집계 및 반정형 데이터 분석(단순한 필터링이 아님)과 같은 집중적이고 빈번한 계산을 개선합니다.

  • 보통 특정 쿼리/하위 쿼리 계산에 초점을 맞춥니다.

  • 외부 테이블 에 대한 쿼리를 개선합니다.

[1] 여러 클러스터 키를 정의할 중요한 이유가 있으면 각각 고유한 클러스터 키가 있는 구체화된 뷰를 여러 개 만들 수 있습니다.

프로토타입 쿼리

다음은 특정 저장소 전략으로 대체로 더 빠르게 실행되는 쿼리의 유형을 강조하려고 제시하는 예제입니다.

클러스터링을 위한 프로토타입 쿼리

자동 클러스터링은 대규모 테이블 검사로 범위 쿼리 의 성능을 높여줍니다. 예를 들어 다음 쿼리에서는 WHERE 절을 통해 많은 데이터를 검사하므로 shipdate 열이 테이블의 클러스터 키라면 쿼리가 더 빠르게 실행됩니다.

SELECT
  SUM(quantity) AS sum_qty,
  SUM(extendedprice) AS sum_base_price,
  AVG(quantity) AS avg_qty,
  AVG(extendedprice) AS avg_price,
  COUNT(*) AS count_order
FROM lineitem
WHERE shipdate >= DATEADD(day, -90, to_date('2023-01-01));
Copy

테이블이 클러스터링되었으면 더 빠르게 실행될 수 있는 쿼리에 대한 예를 더 보려면 클러스터링 키 정의의 이점(매우 큰 테이블의 경우) 섹션을 참조하십시오.

검색 최적화를 위한 프로토타입 쿼리

검색 최적화 서비스는 큰 테이블을 검사해 작은 레코드 하위 세트를 반환하는 포인트 조회 쿼리 의 성능을 높여줄 수 있습니다. 예를 들어 다음 쿼리는 sender_ip 열에 고유한 값이 많이 있을 경우 검색 최적화 서비스에서 더 빠르게 실행됩니다.

SELECT error_message, receiver_ip
FROM logs
WHERE sender_ip IN ('198.2.2.1', '198.2.2.2');
Copy

검색 최적화 서비스로 더 빠르게 실행될 수 있는 다른 쿼리를 검토하려면 다음 예제를 참조하십시오.

구체화된 뷰에 대한 프로토타입 쿼리

구체화된 뷰는 집계처럼 비용이 많이 드는 작업을 사용하여 작은 데이터 하위 세트에 액세스하는 쿼리의 성능을 높여줄 수 있습니다. 일례로, 관리자가 구체화된 뷰 mv_view1 을 만들 때 totalprice 열을 집계했다고 가정해 보십시오. 구체화된 뷰에 대한 다음 쿼리가 기본 테이블에 대해 실행될 때보다 빠르게 실행됩니다.

SELECT
  orderdate,
  SUM(totalprice)
FROM mv_view1
GROUP BY 1;
Copy

구체화된 뷰가 쿼리 속도를 높여줄 수 있는 사용 사례를 더 많이 살펴보려면 구체화된 뷰에 대한 사용 사례의 예 섹션을 참조하십시오.

구현 및 비용 고려 사항

이 섹션에서는 비용과 성능의 균형을 맞출 때 구현 고려 사항과 함께 저장소 전략을 사용하여 쿼리 성능을 개선할 때의 비용 고려 사항을 다룹니다.

초기 투자

저장소 전략을 구현하려면 다른 유형의 성능 최적화(예: SQL 문 재작성 또는 쿼리를 실행하는 웨어하우스 최적화)보다 더 많은 시간과 선행 재정 투자가 필요할 수 있지만 성능 개선 효과가 상당히 클 수 있습니다.

Snowflake는 서버리스 컴퓨팅 리소스 를 사용하여 크레딧을 소비한 후 최적화로 성능이 얼마나 잘 향상되는지 테스트할 수 있는 각각의 저장소 전략을 구현합니다. 또한 이에 따라 Snowflake가 자동 클러스터링과 검색 최적화 서비스를 완전히 구현하는 데 상당한 시간이 걸릴 수 있습니다(예: 매우 큰 테이블의 경우 일주일).

또한 검색 최적화 서비스와 구체화된 뷰에는 Enterprise Edition 이상이 필요하므로 크레딧 가격이 늘어납니다.

지속적인 비용

저장소 전략에는 컴퓨팅 비용과 저장소 비용이 모두 발생합니다.

컴퓨팅 비용

Snowflake는 서버리스 컴퓨팅 리소스를 사용하여 새 데이터가 테이블에 추가될 때 저장소 최적화를 유지 관리합니다. 테이블에 변경 사항이 많을수록 유지 관리 비용이 높아집니다. 테이블이 계속 업데이트되는 경우 저장소 최적화 유지 관리 비용이 엄청날 수 있습니다.

기본 테이블에 대해 자동 클러스터링이 활성화될 때 구체화된 뷰 또는 검색 최적화 서비스를 유지 관리하는 비용이 상당히 클 수 있습니다. 자동 클러스터링을 사용할 경우 Snowflake는 클러스터 키의 차원 주위에 마이크로 파티션을 지속적으로 재클러스터링합니다. 기본 테이블이 재클러스터링될 때마다 Snowflake는 서버리스 컴퓨팅 리소스를 사용하여 구체화된 뷰와 검색 최적화 서비스에서 사용하는 저장소를 업데이트해야 합니다. 결과적으로, 기본 테이블에서 자동 클러스터링 활동이 이루어질 경우 기본 테이블에서의 DML 명령 비용 외에도 구체화된 뷰와 검색 최적화 서비스의 유지 관리 비용도 발생할 수 있습니다.

저장소 비용
자동 클러스터링

검색 최적화 서비스 및 구체화된 뷰와 달리, 자동 클러스터링은 추가 저장소를 만드는 대신 기존 데이터를 재구성합니다. 하지만 재클러스터링으로 Fail-safe 저장소의 크기가 늘어날 경우 저장소 비용이 추가로 발생할 수 있습니다. 자세한 내용은 재클러스터링의 크레딧 및 저장소 영향 섹션을 참조하십시오.

검색 최적화 / 구체화된 뷰

구체화된 뷰와 검색 최적화 서비스는 추가적인 저장소 비용을 발생시키며, 해당 비용은 표준 요율로 청구됩니다.

비용 예상하기

검색 최적화 서비스

SYSTEM$ESTIMATE_SEARCH_OPTIMIZATION_COSTS 함수를 실행하면 열 또는 전체 테이블에 검색 최적화 서비스를 추가하는 비용 예상에 도움을 받을 수 있습니다. 예상 비용은 활성화할 열 수와 테이블이 최근에 얼마나 변경되었는지에 비례합니다.

구현 전략

저장소 전략의 컴퓨팅 비용과 저장소 비용이 상당히 클 수 있으므로, 작게 시작해 초기 비용과 지속적인 비용을 신중하게 추적한 후에 보다 광범위한 구현에 나설 수 있습니다. 예를 들어 한두 개 정도의 테이블에 대해서만 클러스터 키를 선택한 다음 비용을 평가해 본 후에 다른 테이블에 대한 키를 선택할 수 있습니다.

저장소 전략과 관련된 지속적인 비용을 추적할 때 가상 웨어하우스는 쿼리를 실행하는 동안에만 크레딧을 사용하므로 더 빠른 쿼리를 더 적은 비용으로 실행할 수 있습니다. 쿼리 실행 비용을 신중하게 보고한 후 저장소 최적화를 구현하고 비용 평가에 반영할 수 있도록 저장소 최적화 후에 같은 쿼리를 실행하는 비용과 비교하는 것이 좋습니다.