자습서: Query Acceleration Service로 워크로드 성능 향상¶
소개¶
Snowflake는 다양한 워크로드를 가속화하기 위해 다양한 성능 향상을 제공합니다. 이 자습서에서는 QAS(Query Acceleration Service)를 활용하여 전반적인 워크로드 성능을 개선하는 방법을 알아봅니다.
전제 조건¶
Enterprise Edition 이상인 Snowflake 계정
다음 권한이 부여된 역할:
CREATE WAREHOUSE 및 ALTER WAREHOUSE 명령을 실행하는 데 필요한 권한.
자습서에서 Account Usage 뷰를 쿼리하는 데 필요한 권한:
자습서에서 Information Schema 테이블 함수를 실행하는 데 필요한 권한:
SQL에 대한 중급 수준의 지식.
SQL 명령을 실행하기 위한 SnowSQL(CLI 클라이언트) 또는 Snowsight.
알아볼 내용¶
이 자습서에서는 다음에 대해 설명합니다.
가속화에 적합한 쿼리 기록에서 쿼리를 찾습니다.
두 개의 별도 웨어하우스에서 쿼리를 실행하여 쿼리 가속화의 효과를 식별합니다.
가속화를 사용할 때와 사용하지 않을 때의 쿼리 성능과 비용을 비교합니다.
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;
결과에서 UPPER_LIMIT_SCALE_FACTOR 값이 가장 높은 쿼리를 선택합니다.
쿼리 텍스트, 웨어하우스 크기, 상한 배율을 복사합니다.
위의 쿼리로 어떤 결과도 나오지 않더라도 다음 예제 쿼리를 사용하여 이 자습서를 계속 따라갈 수 있습니다. 이 쿼리의 예시 데이터세트는 사용자 자신과 공유되는 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;
이 예제 쿼리를 사용하는 경우 WAREHOUSE_SIZE는 ‘X-Small’이고 UPPER_LIMIT_SCALE_FACTOR는 64입니다.
쿼리 텍스트, 웨어하우스 크기, 상한 배율을 복사합니다.
두 개의 새로운 웨어하우스 만들기¶
이 자습서에서는 쿼리를 실행하기 위해 두 개의 웨어하우스가 필요한데, 하나는 Query Acceleration Service가 활성화된 상태이고 다른 하나는 활성화되지 않은 상태입니다. 별도의 새 웨어하우스에서 동일한 쿼리를 실행하면 이 자습서에서 Query Acceleration Service의 성능과 비용을 모두 비교할 수 있습니다.
웨어하우스를 생성하려면 Snowflake에 연결하고 다음 명령을 Snowsight 에서 실행하거나 SnowSQL을 사용하여 실행하십시오. warehouse_size
및 upper_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;
QAS가 없는 쿼리¶
환경을 설정하고 쿼리 가속에 적합한 쿼리를 찾은 후 Query Acceleration Service를 활성화하지 않고 쿼리를 실행하여 성능을 확인합니다.
쿼리 기록에서 찾은 적합한 쿼리가 아니라 제공된 예제 쿼리를 사용하는 경우 먼저 다음 문을 실행하십시오.
USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
웨어하우스를 선택하고 쿼리를 실행합니다.
QAS가 활성화되지 않은 웨어하우스를 사용합니다.
USE WAREHOUSE noqas_wh;
테스트 쿼리(이전 단계에서 나온 쿼리 텍스트)를 실행합니다.
마지막으로 실행된 쿼리의 쿼리 ID를 가져옵니다.
Snowsight 를 사용 중인 경우 Results 패널의 Query Profile 패널에서 쿼리 ID를 복사하여 붙여넣을 수 있습니다. 또는 다음 문을 실행할 수 있습니다.
SELECT LAST_QUERY_ID();
향후 추가 단계를 위해 이 쿼리 ID를 복사합니다.
QAS를 사용한 쿼리¶
쿼리 가속 없이 웨어하우스에서 쿼리를 실행한 후 QAS가 활성화된 웨어하우스에서 동일한 쿼리를 실행합니다.
QAS가 활성화된 웨어하우스를 사용하여 쿼리를 실행합니다.
USE WAREHOUSE qas_wh;
테스트 쿼리(이전 단계에서 나온 쿼리 텍스트)를 실행합니다.
마지막으로 실행된 쿼리의 쿼리 ID를 가져옵니다.
Snowsight 를 사용 중인 경우 Results 패널의 Query Profile 패널에서 쿼리 ID를 복사하여 붙여넣을 수 있습니다. 또는 다음 문을 실행할 수 있습니다.
SELECT LAST_QUERY_ID();
향후 추가 단계를 위해 이 쿼리 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;
가속을 사용하거나 사용하지 않고 실행한 동일한 쿼리의 TOTAL_ELAPSED_TIME을 비교합니다.
다음으로 각 웨어하우스의 비용을 비교하고 각 웨어하우스에 대해 Information Schema WAREHOUSE_METERING_HISTORY 테이블 함수를 실행할 수 있습니다.
참고
이 자습서에서 새 웨어하우스 생성을 건너뛰는 대신 기존 웨어하우스를 사용한 경우 이 테이블 함수의 결과가 유용하지 않을 가능성이 있습니다.
다음 쿼리를 실행하여
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' ));
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' ));
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' ));
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;
지난달에 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;
일반적으로 가장 큰 이점을 얻는 웨어하우스는 적합한 쿼리 수가 가장 많거나 적합한 쿼리 가속 시간이 가장 많거나 이 두 가지가 결합된 웨어하우스입니다. 예를 들어 어떤 웨어하우스가 위의 두 쿼리 모두에 대한 결과의 맨 위에 있는 경우 해당 웨어하우스가 쿼리 가속에 좋은 후보일 수 있습니다.
Query Acceleration 활성화하기¶
Query Acceleration Service에서 가장 큰 이점을 얻을 웨어하우스를 결정했으면 다음 ALTER WAREHOUSE 문을 실행하여 쿼리 가속을 활성화할 수 있습니다.
ALTER WAREHOUSE <warehouse_name> SET
enable_query_acceleration = TRUE;
이제 웨어하우스에 대해 QAS를 활성화했으므로 적합한 쿼리에 대해 쿼리 가속을 이용할 준비가 되었습니다.
정리 및 추가 리소스¶
정리하려면 이 자습서용으로 만든 웨어하우스를 삭제하십시오.
DROP WAREHOUSE noqas_wh;
DROP WAREHOUSE qas_wh;
다음으로 읽을 내용¶
Query Acceleration Service에 대한 자세한 내용은 Query Acceleration Service 사용하기 섹션을 참조하십시오.
적합한 쿼리와 웨어하우스를 식별하기 위한 추가 예제 쿼리는 Query Acceleration의 이점을 얻을 수 있는 쿼리 및 웨어하우스 식별하기 섹션을 참조하십시오.
QAS 배율에 대한 자세한 내용:
배율에 대한 설명은 CREATE WAREHOUSE 항목의 QUERY_ACCELERATION_MAX_SCALE_FACTOR 를 참조하십시오.
배율 설정에 대한 자세한 내용은 배율 조정하기 섹션을 참조하십시오.
Query Acceleration Service를 사용하기 시작한 후 QAS 사용량과 비용을 모니터링하려면 다음을 수행하십시오.
Query Acceleration Service 사용량 모니터링에 대한 자세한 내용은 Query Acceleration Service 사용량 모니터링하기 섹션을 참조하십시오.
서비스 비용에 대한 자세한 내용은 Query Acceleration Service 비용 섹션을 참조하십시오.
QAS 성능 및 비용을 평가하는 데 도움이 되는 쿼리 예시는 비용 및 성능 평가하기 섹션을 참조하십시오.