자습서: 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_id 값을 계산하여 지난 한 달 동안 쿼리 가속 서비스를 받을 수 있는 쿼리가 가장 많은 웨어하우스를 식별합니다.

    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
  • eligible_query_acceleration_time 값을 합산하여 최근 한 달 동안 쿼리 가속 서비스 이용 시간이 가장 많은 웨어하우스를 식별합니다.

    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 활성화하기

쿼리 가속 서비스의 혜택을 가장 많이 받을 수 있는 웨어하우스를 결정한 후에는 다음 ALTER WAREHOUSE 문을 실행하여 쿼리 가속을 활성화할 수 있습니다.

ALTER WAREHOUSE <warehouse_name> SET ENABLE_QUERY_ACCELERATION = TRUE; 
Copy

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

정리 및 추가 리소스

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

DROP WAREHOUSE noqas_wh; DROP WAREHOUSE qas_wh; 
Copy