자습서: Query Acceleration Service로 워크로드 성능 향상

소개

Snowflake는 다양한 워크로드를 가속화하기 위해 다양한 성능 향상을 제공합니다. 이 자습서에서는 QAS(Query Acceleration Service)를 활용하여 전반적인 워크로드 성능을 개선하는 방법을 알아봅니다.

전제 조건

알아볼 내용

이 자습서에서는 다음에 대해 설명합니다.

  • 가속화에 적합한 쿼리 기록에서 쿼리를 찾습니다.

  • 두 개의 별도 웨어하우스에서 쿼리를 실행하여 쿼리 가속화의 효과를 식별합니다.

  • 가속화를 사용할 때와 사용하지 않을 때의 쿼리 성능과 비용을 비교합니다.

  • Query Acceleration Service에서 가장 많은 이점을 얻을 웨어하우스를 식별합니다.

  • 기존 웨어하우스에 대한 서비스를 활성화합니다.

적합한 쿼리 찾기

가속화할 적합한 쿼리를 찾습니다. 다음 예제 쿼리를 사용하여 가속에 적합한 쿼리를 찾을 수 있습니다.

이 쿼리는 ACCOUNT_USAGE 스키마의 QUERY_ACCELERATION_ELIGIBLE 뷰에서 eligible_query_acceleration_time 필드와 총 쿼리 기간의 비율로 식별되는 적합한 시간 비율이 높은 쿼리를 식별합니다.

SELECT query_id,
       query_text,
       start_time,
       end_time,
       warehouse_name,
       warehouse_size,
       eligible_query_acceleration_time,
       upper_limit_scale_factor,
       DATEDIFF(second, start_time, end_time) AS total_duration,
       eligible_query_acceleration_time / NULLIF(DATEDIFF(second, start_time, end_time), 0) AS eligible_time_ratio
FROM
    SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
WHERE
    start_time >= DATEADD(day, -30, CURRENT_TIMESTAMP())
    AND eligible_time_ratio <= 1.0
    AND total_duration BETWEEN 3 * 60 and 5 * 60
ORDER BY (eligible_time_ratio, upper_limit_scale_factor) DESC NULLS LAST
LIMIT 100;
Copy
  1. 결과에서 UPPER_LIMIT_SCALE_FACTOR 값이 가장 높은 쿼리를 선택합니다.

  2. 쿼리 텍스트, 웨어하우스 크기, 상한 배율을 복사합니다.

위의 쿼리로 어떤 결과도 나오지 않더라도 다음 예제 쿼리를 사용하여 이 자습서를 계속 따라갈 수 있습니다. 이 쿼리의 예시 데이터세트는 사용자 자신과 공유되는 Snowflake 샘플 데이터에서 TPC-DS 데이터 의 스냅샷입니다.

SELECT d.d_year as "Year",
       i.i_brand_id as "Brand ID",
       i.i_brand as "Brand",
       SUM(ss_net_profit) as "Profit"
FROM   snowflake_sample_data.tpcds_sf10tcl.date_dim    d,
       snowflake_sample_data.tpcds_sf10tcl.store_sales s,
       snowflake_sample_data.tpcds_sf10tcl.item        i
WHERE  d.d_date_sk = s.ss_sold_date_sk
  AND s.ss_item_sk = i.i_item_sk
  AND i.i_manufact_id = 939
  AND d.d_moy = 12
GROUP BY d.d_year,
         i.i_brand,
         i.i_brand_id
ORDER BY 1, 4, 2
LIMIT 200;
Copy
  1. 이 예제 쿼리를 사용하는 경우 WAREHOUSE_SIZE는 ‘X-Small’이고 UPPER_LIMIT_SCALE_FACTOR는 64입니다.

  2. 쿼리 텍스트, 웨어하우스 크기, 상한 배율을 복사합니다.

두 개의 새로운 웨어하우스 만들기

이 자습서에서는 쿼리를 실행하기 위해 두 개의 웨어하우스가 필요한데, 하나는 Query Acceleration Service가 활성화된 상태이고 다른 하나는 활성화되지 않은 상태입니다. 별도의 새 웨어하우스에서 동일한 쿼리를 실행하면 이 자습서에서 Query Acceleration Service의 성능과 비용을 모두 비교할 수 있습니다.

웨어하우스를 생성하려면 Snowflake에 연결하고 다음 명령을 Snowsight 에서 실행하거나 SnowSQL을 사용하여 실행하십시오. warehouse_sizeupper_limit_scale_factor 를 이전 단계에서 선택한 값으로 바꿉니다.

CREATE WAREHOUSE noqas_wh WITH
  WAREHOUSE_SIZE='<warehouse_size>'
  ENABLE_QUERY_ACCELERATION = false
  INITIALLY_SUSPENDED = true
  AUTO_SUSPEND = 60;

CREATE WAREHOUSE qas_wh WITH
  WAREHOUSE_SIZE='<warehouse_size>'
  ENABLE_QUERY_ACCELERATION = true
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = <upper_limit_scale_factor>
  INITIALLY_SUSPENDED = true
  AUTO_SUSPEND = 60;
Copy

QAS가 없는 쿼리

환경을 설정하고 쿼리 가속에 적합한 쿼리를 찾은 후 Query Acceleration Service를 활성화하지 않고 쿼리를 실행하여 성능을 확인합니다.

쿼리 기록에서 찾은 적합한 쿼리가 아니라 제공된 예제 쿼리를 사용하는 경우 먼저 다음 문을 실행하십시오.

USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
Copy

웨어하우스를 선택하고 쿼리를 실행합니다.

  1. QAS가 활성화되지 않은 웨어하우스를 사용합니다.

    USE WAREHOUSE noqas_wh;
    
    Copy
  2. 테스트 쿼리(이전 단계에서 나온 쿼리 텍스트)를 실행합니다.

  3. 마지막으로 실행된 쿼리의 쿼리 ID를 가져옵니다.

    Snowsight 를 사용 중인 경우 Results 패널의 Query Profile 패널에서 쿼리 ID를 복사하여 붙여넣을 수 있습니다. 또는 다음 문을 실행할 수 있습니다.

    SELECT LAST_QUERY_ID();
    
    Copy
  4. 향후 추가 단계를 위해 이 쿼리 ID를 복사합니다.

QAS를 사용한 쿼리

쿼리 가속 없이 웨어하우스에서 쿼리를 실행한 후 QAS가 활성화된 웨어하우스에서 동일한 쿼리를 실행합니다.

  1. QAS가 활성화된 웨어하우스를 사용하여 쿼리를 실행합니다.

    USE WAREHOUSE qas_wh;
    
    Copy
  2. 테스트 쿼리(이전 단계에서 나온 쿼리 텍스트)를 실행합니다.

  3. 마지막으로 실행된 쿼리의 쿼리 ID를 가져옵니다.

    Snowsight 를 사용 중인 경우 Results 패널의 Query Profile 패널에서 쿼리 ID를 복사하여 붙여넣을 수 있습니다. 또는 다음 문을 실행할 수 있습니다.

    SELECT LAST_QUERY_ID();
    
    Copy
  4. 향후 추가 단계를 위해 이 쿼리 ID를 복사합니다.

쿼리 성능과 비용 비교하기

이전 단계에서 동일한 쿼리를 두 번 실행했는데, 한 번은 QAS가 활성화된 상태에서 실행하고 다른 한 번은 활성화되지 않은 상태에서 실행했습니다. 이제 쿼리의 성능을 비교할 수 있습니다.

Information Schema QUERY_HISTORY 테이블 함수를 실행하여 쿼리 ID로 쿼리의 실행 시간을 비교하면 됩니다.

SELECT query_id,
       query_text,
       warehouse_name,
       total_elapsed_time
FROM TABLE(snowflake.information_schema.query_history())
WHERE query_id IN ('<non_accelerated_query_id>', '<accelerated_query_id>')
ORDER BY start_time;
Copy

가속을 사용하거나 사용하지 않고 실행한 동일한 쿼리의 TOTAL_ELAPSED_TIME을 비교합니다.

다음으로 각 웨어하우스의 비용을 비교하고 각 웨어하우스에 대해 Information Schema WAREHOUSE_METERING_HISTORY 테이블 함수를 실행할 수 있습니다.

참고

이 자습서에서 새 웨어하우스 생성을 건너뛰는 대신 기존 웨어하우스를 사용한 경우 이 테이블 함수의 결과가 유용하지 않을 가능성이 있습니다.

  1. 다음 쿼리를 실행하여 noqas_wh 웨어하우스의 비용을 확인합니다.

    SELECT start_time,
           end_time,
           warehouse_name,
           credits_used,
           credits_used_compute,
           credits_used_cloud_services,
           (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total
      FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY(
        DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()),
        WAREHOUSE_NAME => 'NOQAS_WH'
      ));
    
    Copy
  2. QAS가 활성화된 웨어하우스의 경우 웨어하우스와 Query Acceleration Service의 비용을 더해 QAS의 총비용을 계산합니다.

    • qas_wh 웨어하우스 비용을 확인합니다.

      SELECT start_time,
             end_time,
             warehouse_name,
             credits_used,
             credits_used_compute,
             credits_used_cloud_services,
             (credits_used + credits_used_compute + credits_used_cloud_services) AS credits_used_total
        FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.WAREHOUSE_METERING_HISTORY(
          DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()),
          WAREHOUSE_NAME => 'QAS_WH'
        ));
      
      Copy
    • Information Schema QUERY_ACCELERATION_HISTORY 테이블 함수를 사용하여 Query Acceleration Service 비용을 확인합니다.

        SELECT start_time,
               end_time,
               warehouse_name,
               credits_used,
               num_files_scanned,
               num_bytes_scanned
          FROM TABLE(SNOWFLAKE.INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY(
            DATE_RANGE_START => DATEADD('days', -1, CURRENT_DATE()),
            WAREHOUSE_NAME => 'QAS_WH'
      ));
      
      Copy

    QAS의 총비용에 대해 두 번째 쿼리의 credits_used 값과 함께 첫 번째 쿼리의 credits_used_total 값을 더합니다.

지금까지 두 웨어하우스(QAS가 활성화된 웨어하우스와 활성화되지 않은 웨어하우스)에서 쿼리를 테스트했으며 QAS의 성능과 비용을 비교할 수 있었습니다. 다음으로 QAS에서 가장 큰 이점을 얻을 웨어하우스를 식별하는 방법을 알아봅니다.

워크로드에서 적합한 웨어하우스 찾기

가속에 적합한 쿼리 수가 가장 많은 웨어하우스 및/또는 쿼리 가속에 가장 적합한 시간을 가진 웨어하우스를 확인하여 쿼리 가속에 가장 큰 이점이 있는 웨어하우스를 찾을 수 있습니다.

  • 지난달에 Query Acceleration Service에 적합한 쿼리가 가장 많은 웨어하우스를 식별합니다.

    SELECT warehouse_name, count(query_id) as num_eligible_queries, MAX(upper_limit_scale_factor)
      FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
      WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP())
      GROUP BY warehouse_name
      ORDER BY num_eligible_queries DESC;
    
    Copy
  • 지난달에 Query Acceleration Service에 가장 적합한 시간을 가진 웨어하우스를 식별합니다.

    SELECT warehouse_name, SUM(eligible_query_acceleration_time) AS total_eligible_time, MAX(upper_limit_scale_factor)
      FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
      WHERE start_time > DATEADD(month, -1, CURRENT_TIMESTAMP())
      GROUP BY warehouse_name
      ORDER BY total_eligible_time DESC;
    
    Copy

일반적으로 가장 큰 이점을 얻는 웨어하우스는 적합한 쿼리 수가 가장 많거나 적합한 쿼리 가속 시간이 가장 많거나 이 두 가지가 결합된 웨어하우스입니다. 예를 들어 어떤 웨어하우스가 위의 두 쿼리 모두에 대한 결과의 맨 위에 있는 경우 해당 웨어하우스가 쿼리 가속에 좋은 후보일 수 있습니다.

Query Acceleration 활성화하기

Query Acceleration Service에서 가장 큰 이점을 얻을 웨어하우스를 결정했으면 다음 ALTER WAREHOUSE 문을 실행하여 쿼리 가속을 활성화할 수 있습니다.

ALTER WAREHOUSE <warehouse_name> SET
  enable_query_acceleration = TRUE;
Copy

이제 웨어하우스에 대해 QAS를 활성화했으므로 적합한 쿼리에 대해 쿼리 가속을 이용할 준비가 되었습니다.

정리 및 추가 리소스

정리하려면 이 자습서용으로 만든 웨어하우스를 삭제하십시오.

DROP WAREHOUSE noqas_wh;

DROP WAREHOUSE qas_wh;
Copy