Query Acceleration Service 사용하기

쿼리 가속 서비스는 웨어하우스에서 쿼리 워크로드의 일부를 가속화할 수 있습니다. 이 서비스를 웨어하우스용으로 활성화하면 일반적인 쿼리보다 더 많은 리소스를 사용하는 쿼리인 이상값 쿼리의 영향을 줄여 전반적인 웨어하우스 성능을 개선할 수 있습니다. 쿼리 가속 서비스는 쿼리 처리 작업 중 일부를 서비스에서 제공하는 공유 컴퓨팅 리소스로 오프로딩하여 이러한 효과를 거둡니다.

쿼리 가속 서비스의 이점을 활용할 수 있는 워크로드 유형의 예는 다음과 같습니다.

  • 임시 분석.

  • 쿼리당 데이터 볼륨을 예측할 수 없는 워크로드.

  • 대규모 스캔 및 선택적 필터를 사용한 쿼리.

Query Acceleration Service는 더 많은 작업을 병렬로 수행하고 스캔 및 필터링에 소요되는 벽시계 시간을 줄여 이러한 유형의 워크로드를 보다 효율적으로 처리할 수 있습니다.

참고

Query Acceleration Service는 서버 가용성에 따라 다릅니다. 따라서 성능 향상은 시간이 지남에 따라 변동될 수 있습니다.

이 항목의 내용:

Query Acceleration의 이점을 얻을 수 있는 쿼리 및 웨어하우스 식별하기

쿼리 가속 서비스의 이점을 얻을 수 있는 쿼리를 식별하기 위해, SYSTEM$ESTIMATE_QUERY_ACCELERATION 함수를 사용하거나 QUERY_ACCELERATION_ELIGIBLE 뷰 을 쿼리할 수 있습니다. QUERY_ACCELERATION_ELIGIBLE 뷰는 쿼리 가속 서비스의 이점을 얻을 수 있는 웨어하우스도 식별합니다.

부적합 쿼리

일부 쿼리는 쿼리 가속화에 적합하지 않습니다. 다음은 쿼리를 가속화할 수 없는 일반적인 이유입니다.

  • 파티션이 충분하지 않습니다. 검색할 파티션이 충분하지 않은 경우 쿼리 가속의 이점은 Query Acceleration Service에 대한 리소스 획득 시의 대기 시간만큼 상쇄됩니다.

  • 이 쿼리는 필터링하거나 집계하지 않습니다.

  • 필터가 충분히 선택적이지 않습니다. 또는 GROUP BY 식의 카디널리티가 높습니다.

  • 쿼리에 LIMIT 절이 포함되어 있지만 ORDER BY 절은 없습니다.

  • 쿼리에는 비결정적 결과(예: SEQ 또는 RANDOM)를 반환하는 함수가 포함됩니다.

SYSTEM$ESTIMATE_QUERY_ACCELERATION 함수로 쿼리 식별하기

SYSTEM$ESTIMATE_QUERY_ACCELERATION 함수를 사용하면 이전에 실행된 쿼리가 쿼리 가속 서비스의 이점을 얻을 수 있는지 확인하는 데 도움이 될 수 있습니다. 쿼리가 쿼리 가속에 적합한 경우 이 함수는 다양한 쿼리 가속 배율 에 대한 예상 쿼리 실행 시간을 반환합니다.

쿼리 가속이 특정 쿼리에 이점이 되는 부분이 있을지 확인하려면 다음 문을 실행하십시오.

SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f'));
Copy

이 예에서는 쿼리가 쿼리 가속 서비스에 적합하며 서비스를 사용하는 예상 쿼리 시간을 포함합니다.

{
  "estimatedQueryTimes": {
    "1": 171,
    "10": 115,
    "2": 152,
    "4": 133,
    "8": 120
  },
  "originalQueryTime": 300.291,
  "queryUUID": "8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f",
  "status": "eligible",
  "upperLimitScaleFactor": 10
}
Copy

다음 예는 쿼리 가속 서비스에 적합하지 않은 쿼리의 결과를 보여줍니다.

SELECT PARSE_JSON(SYSTEM$ESTIMATE_QUERY_ACCELERATION('cf23522b-3b91-cf14-9fe0-988a292a4bfa'));
Copy

위의 문은 다음과 같은 출력을 내놓습니다.

{
  "estimatedQueryTimes": {},
  "originalQueryTime": 20.291,
  "queryUUID": "cf23522b-3b91-cf14-9fe0-988a292a4bfa",
  "status": "ineligible",
  "upperLimitScaleFactor": 0
}
Copy

QUERY_ACCELERATION_ELIGIBLE 뷰로 쿼리 및 웨어하우스 식별하기

QUERY_ACCELERATION_ELIGIBLE 뷰 을 쿼리하여 쿼리 가속 서비스에서 가장 큰 이점을 얻을 수 있는 쿼리와 웨어하우스를 식별합니다. 각 쿼리에 대해 뷰에는 쿼리 가속 서비스에 적합한 쿼리 실행 시간이 포함됩니다.

참고

이들 예에서는 ACCOUNTADMIN 역할(또는 공유 SNOWFLAKE 데이터베이스에서 IMPORTED PRIVILEGES가 부여된 역할)이 사용 중이라고 간주합니다. 이것이 사용 중이지 않는 경우에는 다음 명령을 실행한 후에 예제의 쿼리를 실행하십시오.

USE ROLE ACCOUNTADMIN;
Copy

가속에 적합한 쿼리 실행 시간으로 서비스에서 가장 큰 이점을 얻을 수 있는 쿼리를 식별합니다.

SELECT query_id, eligible_query_acceleration_time
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  ORDER BY eligible_query_acceleration_time DESC;
Copy

특정 웨어하우스 mywh 의 서비스로부터 가장 큰 이점을 얻을 수 있는 쿼리를 식별합니다.

SELECT query_id, eligible_query_acceleration_time
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = 'mywh'
  ORDER BY eligible_query_acceleration_time DESC;
Copy

Query Acceleration Service에 대해 지정된 기간에 적격한 쿼리가 가장 많은 웨어하우스를 식별합니다.

SELECT warehouse_name, COUNT(query_id) AS num_eligible_queries
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE start_time > 'Mon, 29 May 2023 00:00:00'::timestamp
  AND end_time < 'Tue, 30 May 2023 00:00:00'::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
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  GROUP BY warehouse_name
  ORDER BY total_eligible_time DESC;
Copy

주어진 웨어하우스에 대한 쿼리 가속 서비스의 상한 배율 을 식별합니다.

SELECT MAX(upper_limit_scale_factor)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = 'mywh';
Copy

주어진 웨어하우스에 대한 Query Acceleration Service의 배율 분포를 식별합니다.

SELECT upper_limit_scale_factor, COUNT(upper_limit_scale_factor)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE
  WHERE warehouse_name = '<warehouse_name>'
  GROUP BY 1 ORDER BY 1;
Copy

Query Acceleration 활성화하기

웨어하우스(CREATE WAREHOUSE 사용) 또는 그 이상(ALTER WAREHOUSE 사용)을 만들 때 ENABLE_QUERY_ACCELERATION = TRUE를 지정하여 쿼리 가속 서비스를 활성화합니다.

지원되는SQL 명령

쿼리 가속 서비스는 다음 SQL 명령을 지원합니다.

  • SELECT

  • INSERT(문에 SELECT 문이 포함된 경우)

  • CREATE TABLE AS SELECT (CTAS)

지원되는 SQL 명령이 포함된 쿼리 또는 쿼리의 일부(예: 하위 쿼리 또는 절)는 쿼리 가속 서비스가 가속에 적합한 경우 쿼리 가속 서비스에 의해 가속될 수 있습니다.

다음 예에서는 my_wh 라는 웨어하우스에 대한 쿼리 가속 서비스를 활성화합니다.

CREATE WAREHOUSE my_wh WITH
  ENABLE_QUERY_ACCELERATION = true;
Copy

SHOW WAREHOUSES 명령을 실행하여 my_wh 웨어하우스에 대한 세부 정보를 표시합니다.

SHOW WAREHOUSES LIKE 'my_wh';

+---------+---------+----------+---------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+--------------+---------+---------------------------+-------------------------------------+------------------+---------+----------+--------+-----------+------------+
| name    | state   | type     | size    | running | queued | is_default | is_current | auto_suspend | auto_resume | available | provisioning | quiescing | other | created_on                    | resumed_on                    | updated_on                    | owner        | comment | enable_query_acceleration | query_acceleration_max_scale_factor | resource_monitor | actives | pendings | failed | suspended | uuid       |
|---------+---------+----------+---------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+--------------+---------+---------------------------+-------------------------------------+------------------+---------+----------+--------+-----------+------------|
| MY_WH   | SUSPENDED | STANDARD | Medium |       0 |      0 | N          | N          |          600 | true        |           |              |           |       | 2023-01-20 14:31:49.283 -0800 | 2023-01-20 14:31:49.388 -0800 | 2023-01-20 16:34:28.583 -0800 | ACCOUNTADMIN |         | true                      |                                   8 | null             |       0 |        0 |      0 |         4 | 1132659053 |
+---------+---------+----------+---------+---------+--------+------------+------------+--------------+-------------+-----------+--------------+-----------+-------+-------------------------------+-------------------------------+-------------------------------+--------------+---------+---------------------------+-------------------------------------+------------------+---------+----------+--------+-----------+------------+
Copy

쿼리 가속 서비스는 웨어하우스의 크레딧 사용률을 높일 수 있습니다. 최대 배율을 지정해 사용률을 제한할 수 있습니다. QUERY_ACCELERATION_MAX_SCALE_FACTOR 속성에 대한 자세한 내용은 CREATE WAREHOUSE 또는 ALTER WAREHOUSE 섹션을 참조하십시오.

QUERY_ACCELERATION_ELIGIBLE 뷰와 SYSTEM$ESTIMATE_QUERY_ACCELERATION 함수는 웨어하우스에 알맞은 배율을 결정하는 데 유용할 수 있습니다. 자세한 내용은 이 항목의 Query Acceleration의 이점을 얻을 수 있는 쿼리 및 웨어하우스 식별하기 섹션을 참조하십시오.

배율 조정하기

배율은 웨어하우스가 쿼리 가속화를 위해 임대할 수 있는 컴퓨팅 리소스 양의 상한을 설정할 수 있는 비용 통제 메커니즘입니다. 이 값은 웨어하우스 크기와 비용을 기준으로 하는 승수로 사용됩니다.

예를 들어 중간 규모의 웨어하우스에 대해 배율을 5로 설정한다고 가정하겠습니다. 그 의미는 다음과 같습니다.

  • 웨어하우스가 중형 웨어하우스 크기의 최대 5배까지 컴퓨팅 리소스를 임대할 수 있습니다.

  • 중형 웨어하우스의 사용 비용은 시간당 4크레딧 이므로, 이러한 리소스를 임대하면 시간당 최대 20크레딧이 추가로 소요될 수 있습니다(웨어하우스당 4크레딧 x 크기의 5배).

Query Acceleration Service를 동시에 사용하는 쿼리 수에 관계없이 비용은 동일합니다. Query Acceleration Service는 서비스가 사용 중일 때만 초 단위로 요금이 청구됩니다. 이러한 크레딧은 웨어하우스 사용량과 별도로 청구됩니다.

모든 쿼리에 배율에 따라 사용할 수 있는 전체 리소스 세트가 필요한 것은 아닙니다. 서비스에 대해 요청되는 리소스의 양은 가속에 적합한 쿼리의 양과 이에 답하기 위해 처리되는 데이터의 양에 따라 다릅니다. 배율 값 또는 요청된 리소스의 양에 관계없이 쿼리 가속에 사용할 수 있는 컴퓨팅 리소스의 양은 서비스에서 리소스의 가용성과 다른 동시 요청 수에 따라 제한됩니다. Query Acceleration Service는 쿼리가 실행될 때 사용할 수 있는 리소스를 필요한 만큼만 사용합니다.

배율이 명시적으로 설정되지 않은 경우 기본값은 8 입니다. 배율을 0 으로 설정하면 상한이 사라지고 쿼리가 쿼리 처리에 필요하고 사용할 수 있는 만큼 리소스를 임대할 수 있습니다.

다음 예에서는 최대 배율이 0인 쿼리 가속화 서비스를 사용하도록 my_wh 라는 웨어하우스를 수정합니다.

ALTER WAREHOUSE my_wh SET
  ENABLE_QUERY_ACCELERATION = true
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = 0;
Copy

Query Acceleration Service 사용량 모니터링하기

웹 인터페이스를 사용하여 Query Acceleration 사용량 모니터링하기

쿼리 가속 서비스를 활성화하면 쿼리 프로필 에서 프로필 개요 패널을 보고 쿼리 가속 결과의 효과를 확인할 수 있습니다.

다음 스크린샷에서 전체 쿼리에 대해 표시되는 통계의 예를 볼 수 있습니다. 한 쿼리에서 여러 작업을 가속화한 경우 이 뷰에 결과가 집계되므로 쿼리 가속 서비스에서 수행한 총 작업량을 볼 수 있습니다.

../_images/query-acceleration-profile-overview.png

Profile Overview 패널의 Query Acceleration 섹션에는 다음 통계가 포함됩니다.

  • 서비스에서 스캔한 파티션 수 — 쿼리 가속 서비스로 스캔하기 위해 오프로드된 파일 개수.

  • 가속을 위해 선택한 스캔 수 — 가속화되는 테이블 스캔 개수.

연산자 세부 정보(자세한 내용은 프로필 개요/ 연산자 세부 정보 참조)에서 연산자를 클릭하여 자세한 정보를 확인하십시오. 다음 스크린샷에서 TableScan 작업에 대해 표시되는 통계의 예를 볼 수 있습니다.

../_images/query-acceleration-table-scan.png

TableScan 세부 정보 패널의 Query Acceleration 섹션에는 다음 통계가 포함됩니다.

  • 서비스에서 스캔한 파티션 수 — 쿼리 가속 서비스로 스캔하기 위해 오프로드된 파일 개수.

Account Usage QUERY_HISTORY 뷰를 사용하여 Query Acceleration 사용량 모니터링하기

쿼리 가속이 쿼리에 미치는 영향을 확인하려면 QUERY_HISTORY 뷰 에서 다음 열을 사용할 수 있습니다.

  • QUERY_ACCELERATION_BYTES_SCANNED

  • QUERY_ACCELERATION_PARTITIONS_SCANNED

  • QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

이러한 열을 사용하여 쿼리 가속 서비스의 이점을 활용한 쿼리를 식별할 수 있습니다. 각 쿼리에 대해 쿼리 가속 서비스에서 스캔한 파티션과 바이트의 총수를 확인할 수도 있습니다.

이러한 각 열에 대한 설명은 QUERY_HISTORY 뷰 섹션을 참조하십시오.

참고

주어진 쿼리에 대해, QUERY_ACCELERATION_BYTES_SCANNED 열과 BYTES_SCANNED 열의 합계는 Query Acceleration Service를 사용할 때가 이 서비스를 사용하지 않을 때보다 더 클 수 있습니다. QUERY_ACCELERATION_PARTITIONS_SCANNED 열과 PARTITIONS_SCANNED 열의 합에 대해서도 마찬가지입니다.

바이트 및 파티션 수의 증가는 쿼리 가속을 촉진하려고 서비스에서 생성되는 중간 결과 때문입니다.

예를 들어, 지난 24시간 동안 쿼리 가속 서비스에서 스캔한 바이트가 가장 많은 쿼리를 찾는 방법은 다음과 같습니다.

SELECT query_id,
       query_text,
       warehouse_name,
       start_time,
       end_time,
       query_acceleration_bytes_scanned,
       query_acceleration_partitions_scanned,
       query_acceleration_upper_limit_scale_factor
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE query_acceleration_partitions_scanned > 0 
  AND start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
  ORDER BY query_acceleration_bytes_scanned DESC;
Copy

지난 24시간 동안 쿼리 가속 서비스에서 스캔한 파티션 수가 가장 많은 쿼리를 찾는 방법은 다음과 같습니다.

SELECT query_id,
       query_text,
       warehouse_name,
       start_time,
       end_time,
       query_acceleration_bytes_scanned,
       query_acceleration_partitions_scanned,
       query_acceleration_upper_limit_scale_factor
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE query_acceleration_partitions_scanned > 0 
  AND start_time >= DATEADD(hour, -24, CURRENT_TIMESTAMP())
  ORDER BY query_acceleration_partitions_scanned DESC;
Copy

Query Acceleration Service 비용

Query Acceleration은 서버리스 컴퓨팅 리소스 를 사용하여 적격 쿼리의 일부를 실행할 때 크레딧을 사용합니다.

Query Acceleration은 사용한 컴퓨팅 리소스에 대해 초 단위로 비용을 결제한다는 점에서 Snowflake의 다른 서버리스 기능처럼 청구됩니다. Query Acceleration Service에서 사용하는 컴퓨팅 시간당 크레딧 수를 알아보려면 Snowflake 서비스 사용 테이블 에서 《서버리스 기능 크레딧 테이블》을 참조하십시오.

Classic Console에서 청구 정보 보기

계정에 대해 Query Acceleration을 활성화한 경우 Classic Console 의 청구 페이지에는 계정의 모든 웨어하우스에 걸쳐 서비스에서 사용하는 모든 크레딧을 표시하는 QUERY_ACCELERATION이라는 웨어하우스가 포함됩니다.

아래 스크린샷에서 QUERY_ACCELERATION 웨어하우스에 대해 표시된 청구 정보의 예를 볼 수 있습니다.

../_images/query-acceleration-billing-ui.png

Account Usage QUERY_ACCELERATION_HISTORY 뷰를 사용하여 청구 보기

Account Usage QUERY_ACCELERATION_HISTORY 뷰 에서 청구 데이터를 볼 수 있습니다.

이 쿼리는 Query Acceleration Service에 대해 계정의 각 웨어하우스에서 사용한 크레딧(당월 합계)의 총수를 반환합니다.

SELECT warehouse_name,
       SUM(credits_used) AS total_credits_used
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
  WHERE start_time >= DATE_TRUNC(month, CURRENT_DATE)
  GROUP BY 1
  ORDER BY 2 DESC;
Copy

Organization Usage QUERY_ACCELERATION_HISTORY 뷰를 사용하여 청구 보기

Organization Usage QUERY_ACCELERATION_HISTORY 뷰 에서 조직 내 모든 계정의 Query Acceleration Service에 대한 청구 데이터를 볼 수 있습니다.

이 쿼리는 Query Acceleration Service에 대해 각 계정의 각 웨어하우스에서 사용한 크레딧(당월 합계)의 총수를 반환합니다.

SELECT account_name,
       warehouse_name,
       SUM(credits_used) AS total_credits_used
  FROM SNOWFLAKE.ORGANIZATION_USAGE.QUERY_ACCELERATION_HISTORY
  WHERE usage_date >= DATE_TRUNC(month, CURRENT_DATE)
  GROUP BY 1, 2
  ORDER BY 3 DESC;
Copy

QUERY_ACCELERATION_HISTORY 함수를 사용하여 청구 보기

Information Schema QUERY_ACCELERATION_HISTORY 함수를 사용하여 청구 데이터를 볼 수도 있습니다.

다음 예제에서는 QUERY_ACCELERATION_HISTORY 함수를 사용하여 지난 12시간 동안 이 서비스로 가속화한 쿼리에 대한 정보를 반환합니다.

SELECT start_time,
       end_time,
       credits_used,
       warehouse_name,
       num_files_scanned,
       num_bytes_scanned
  FROM TABLE(INFORMATION_SCHEMA.QUERY_ACCELERATION_HISTORY(
    date_range_start=>DATEADD(H, -12, CURRENT_TIMESTAMP)));
Copy

비용 및 성능 평가하기

이 섹션에는 Query Acceleration Service를 활성화하기 전과 후에 쿼리 성능과 비용을 평가하는 데 도움이 될 수 있는 예제 쿼리가 포함되어 있습니다.

웨어하우스 및 Query Acceleration Service 비용 보기

다음 쿼리는 웨어하우스와 특정 웨어하우스에 대한 Query Acceleration Service 비용을 계산합니다. 웨어하우스에 대한 Query Acceleration Service를 활성화한 후 이 쿼리를 실행하여 쿼리 가속 활성화 전후의 비용을 비교할 수 있습니다. 쿼리의 날짜 범위는 Query Acceleration Service의 첫 번째 크레딧 사용 8주 전부터 Query Acceleration Service의 비용이 마지막으로 발생한 지 8주 후까지(또는 현재 날짜까지)입니다.

참고

  • 이 쿼리는 Query Acceleration Service 활성화 전후에 웨어하우스 속성과 워크로드가 동일하게 유지되는 경우의 서비스 비용 평가에 가장 유용합니다.

  • 이 쿼리는 웨어하우스에서 가속화된 쿼리에 대한 크레딧 사용이 있었던 경우에만 결과를 반환합니다.

이 예시 쿼리는 my_warehouse 의 웨어하우스 및 Query Acceleration Service 비용을 반환합니다.

WITH credits AS (
  SELECT 'QC' AS credit_type,
         TO_DATE(end_time) AS credit_date,
         SUM(credits_used) AS num_credits
    FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
    WHERE warehouse_name = 'my_warehouse'
    AND credit_date BETWEEN
           DATEADD(WEEK, -8, (
             SELECT TO_DATE(MIN(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
           AND
           DATEADD(WEEK, +8, (
             SELECT TO_DATE(MAX(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
  GROUP BY credit_date
  UNION ALL
  SELECT 'WC' AS credit_type,
         TO_DATE(end_time) AS credit_date,
         SUM(credits_used) AS num_credits
    FROM SNOWFLAKE.ACCOUNT_USAGE.WAREHOUSE_METERING_HISTORY
    WHERE warehouse_name = 'my_warehouse'
    AND credit_date BETWEEN
           DATEADD(WEEK, -8, (
             SELECT TO_DATE(MIN(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
           AND
           DATEADD(WEEK, +8, (
             SELECT TO_DATE(MAX(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
               WHERE warehouse_name = 'my_warehouse'
           ))
  GROUP BY credit_date
)
SELECT credit_date,
       SUM(IFF(credit_type = 'QC', num_credits, 0)) AS qas_credits,
       SUM(IFF(credit_type = 'WC', num_credits, 0)) AS compute_credits,
       compute_credits + qas_credits AS total_credits,
       AVG(total_credits) OVER (
         PARTITION BY NULL ORDER BY credit_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
         AS avg_total_credits_7days
  FROM credits
  GROUP BY credit_date
  ORDER BY credit_date;
Copy

쿼리 성능 보기

이 쿼리는 지정된 웨어하우스에 대해 쿼리 가속에 적합한 쿼리의 평균 실행 시간을 반환합니다. 쿼리의 날짜 범위는 Query Acceleration Service의 첫 번째 크레딧 사용 8주 전부터 Query Acceleration Service의 비용이 마지막으로 발생한 지 8주 후까지(또는 현재 날짜까지)입니다. 결과는 Query Acceleration Service 활성화 후 평균 쿼리 성능의 변화 양상을 평가하는 데 도움이 될 수 있습니다.

참고

  • 이 쿼리는 Query Acceleration Service 활성화 전후에 웨어하우스 워크로드가 동일하게 유지되는 경우 쿼리 성능을 평가하는 데 가장 유용합니다.

  • 웨어하우스 워크로드가 안정적으로 유지된다면 num_execs 열의 값은 일관되게 유지되어야 합니다.

  • 쿼리 결과의 num_execs 열 값이 급격히 증가하거나 감소하는 경우 이 쿼리 결과는 쿼리 성능 평가에 유용하지 않을 가능성이 큽니다.

이 예시 쿼리는 일별 쿼리 실행 시간을 반환하고 my_warehouse 웨어하우스에서 가속에 적합한 쿼리에 대해 이전 주의 7일 평균을 계산합니다.

WITH qas_eligble_or_accelerated AS (
  SELECT TO_DATE(qh.end_time) AS exec_date,
        COUNT(*) AS num_execs,
        SUM(qh.execution_time) AS exec_time,
        MAX(IFF(qh.query_acceleration_bytes_scanned > 0, 1, NULL)) AS qas_accel_flag
    FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY AS qh
    WHERE qh.warehouse_name = 'my_warehouse'
    AND TO_DATE(qh.end_time) BETWEEN
           DATEADD(WEEK, -8, (
             SELECT TO_DATE(MIN(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
              WHERE warehouse_name = 'my_warehouse'
           ))
           AND
           DATEADD(WEEK, +8, (
             SELECT TO_DATE(MAX(end_time))
               FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_HISTORY
              WHERE warehouse_name = 'my_warehouse'
           ))
    AND (qh.query_acceleration_bytes_scanned > 0
          OR
          EXISTS (
            SELECT 1
              FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_ACCELERATION_ELIGIBLE AS qae
               WHERE qae.query_id = qh.query_id
               AND qae.warehouse_name = qh.warehouse_name
          )
         )
    GROUP BY exec_date
)
SELECT exec_date,
       SUM(exec_time) OVER (
         PARTITION BY NULL ORDER BY exec_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW
       ) /
       NULLIFZERO(SUM(num_execs) OVER (
         PARTITION BY NULL ORDER BY exec_date ROWS BETWEEN 6 PRECEDING AND CURRENT ROW)
       ) AS avg_exec_time_7days,
      exec_time / NULLIFZERO(num_execs) AS avg_exec_time,
      qas_accel_flag,
      num_execs,
      exec_time
  FROM qas_eligble_or_accelerated;
Copy

이 문의 출력에는 다음 열이 포함됩니다.

설명

EXEC_DATE

쿼리 실행 날짜입니다.

AVG_EXEC_TIME_7DAYS

EXEC_DATE를 포함한 이전 7일 동안의 평균 실행 시간입니다.

AVG_EXEC_TIME

평균 쿼리 실행 시간입니다.

QAS_ACCEL_FLAG

쿼리가 가속화된 경우 1, 쿼리가 가속화되지 않은 경우 NULL입니다.

NUM_EXECS

가속화된 쿼리의 수입니다.

EXEC_TIME

모든 쿼리 가속 적격 쿼리의 총 실행 시간입니다.

검색 최적화와의 호환성

쿼리 가속화와 검색 최적화 는 함께 작동하여 쿼리 성능을 최적화할 수 있습니다. 먼저, 검색 최적화는 쿼리에 필요하지 않은 마이크로 파티션 을 정리할 수 있습니다. 그런 다음, 적합한 쿼리 의 경우 쿼리 가속화는 나머지 작업 중 일부를 서비스에서 제공하는 공유 컴퓨팅 리소스로 오프로드할 수 있습니다.

두 서비스로 모두 가속화되는 쿼리의 성능은 워크로드와 사용 가능한 리소스에 따라 다릅니다.