Tutorial: Como melhorar o desempenho da carga de trabalho com o Query Acceleration Service

Introdução

O Snowflake oferece uma variedade de aprimoramentos de desempenho para acelerar suas diversas cargas de trabalho. Neste tutorial, você aprenderá como aproveitar o Query Acceleration Service (QAS) para melhorar o desempenho geral da carga de trabalho.

Pré-requisitos

O que você aprenderá

Neste tutorial você aprenderá a:

  • Encontrar uma consulta em seu histórico de consultas qualificada para aceleração.

  • Executar a consulta em dois warehouses separados para identificar os efeitos da aceleração da consulta.

  • Comparar o desempenho e o custo da consulta com e sem aceleração.

  • Identificar quais de seus warehouses se beneficiariam mais com o Query Acceleration Service.

  • Ativar o serviço para um warehouse existente.

Como encontrar uma consulta qualificada

Encontre uma consulta elegível para a aceleração. Você pode usar a consulta de exemplo a seguir para localizar uma consulta qualificada para aceleração.

Esta consulta identifica consultas com uma proporção de tempo elegível alta, conforme identificado pela proporção do campo eligible_query_acceleration_time e a duração total da consulta na exibição QUERY_ACCELERATION_ELIGIBLE no esquema ACCOUNT_USAGE.

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. Nos resultados, selecione uma consulta com o maior valor UPPER_LIMIT_SCALE_FACTOR.

  2. Copie o texto da consulta, o tamanho do warehouse e o fator de escala do limite superior.

Se a consulta acima não produzir nenhum resultado, você ainda poderá seguir este tutorial usando o exemplo de consulta a seguir. O conjunto de dados de exemplo para esta consulta é um instantâneo dos dados TPC-DS nos dados de amostra do Snowflake que são compartilhados com você:

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. Se você usar esta consulta de exemplo, o WAREHOUSE_SIZE será “X-Small” e UPPER_LIMIT_SCALE_FACTOR será 64.

  2. Copie o texto da consulta, o tamanho do warehouse e o fator de escala do limite superior.

Criação de dois novos warehouses

Este tutorial precisa de dois warehouses para executar a consulta: um com o Query Acceleration Service habilitado e outro sem. A execução da mesma consulta em warehouses novos e separados permitirá que você compare o desempenho e o custo do Query Acceleration Service neste tutorial.

Para criar os warehouses, conecte-se ao Snowflake e execute o seguinte comando em Snowsight ou usando SnowSQL. Substitua o warehouse_size e upper_limit_scale_factor pelos valores selecionados na etapa anterior:

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

Consulta sem QAS

Depois de configurar seu ambiente e localizar uma consulta qualificada para aceleração de consulta, execute a consulta sem ativar o Query Acceleration Service para ver seu desempenho.

Se você estiver usando a consulta de exemplo fornecida em vez de uma consulta qualificada de seu histórico de consultas, execute primeiro a seguinte instrução:

USE SCHEMA snowflake_sample_data.tpcds_sf10tcl;
Copy

Selecione um warehouse e execute sua consulta:

  1. Use o warehouse que não tenha o QAS habilitado.

    USE WAREHOUSE noqas_wh;
    
    Copy
  2. Execute sua consulta de teste (o texto da consulta da etapa anterior).

  3. Obtenha o ID da última consulta executada.

    Se você estiver usando Snowsight, você pode copiar e colar o ID da consulta do painel Query Profile no painel Results. Como alternativa, você pode executar a seguinte instrução:

    SELECT LAST_QUERY_ID();
    
    Copy
  4. Copiar este ID de consulta para etapas futuras adicionais.

Consulta com QAS

Após executar a consulta em um warehouse sem aceleração de consulta, execute a mesma consulta no warehouse com QAS habilitado.

  1. Use o warehouse com QAS ativado para executar sua consulta:

    USE WAREHOUSE qas_wh;
    
    Copy
  2. Execute sua consulta de teste (o texto da consulta da etapa anterior).

  3. Obtenha o ID da última consulta executada

    Se você estiver usando Snowsight, você pode copiar e colar o ID da consulta do painel Query Profile no painel Results. Como alternativa, você pode executar a seguinte instrução:

    SELECT LAST_QUERY_ID();
    
    Copy
  4. Copiar este ID de consulta para etapas futuras adicionais.

Comparação do desempenho e custo da consulta

Nas etapas anteriores, você executou a mesma consulta duas vezes, uma vez usando um warehouse com QAS habilitada e outra sem. Agora, você pode comparar o desempenho da consulta.

Para fazer isso, você pode executar a função de tabela do Information Schema QUERY_HISTORY para comparar o tempo de execução das consultas usando os IDs de suas consultas:

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

Compare o TOTAL_ELAPSED_TIME para a mesma consulta executada com e sem aceleração.

Em seguida, compare os custos de cada warehouse, você pode executar a função de tabela do Information Schema WAREHOUSE_METERING_HISTORY para cada warehouse:

Nota

Se você pulou a criação de novos warehouses para este tutorial e, em vez disso, usou warehouses pré-existentes, os resultados dessa função de tabela provavelmente não serão úteis.

  1. Execute a consulta a seguir para visualizar os custos do warehouse 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. Para o warehouse com QAS ativado, adicione os custos do warehouse e o Query Acceleration Service para calcular o custo total de QAS.

    • Veja os custos do warehouse 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
    • Veja os custos do Query Acceleration Service com a função de tabela do Information Schema QUERY_ACCELERATION_HISTORY:

        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

    Adicione o valor credits_used_total da primeira consulta ao valor credits_used da segunda consulta para o custo total de QAS.

Até agora, você testou uma consulta em dois warehouses, um warehouse com QAS habilitado e outra sem, e pôde comparar o desempenho e o custo de QAS. A seguir, você aprenderá a identificar qual dos seus warehouses mais se beneficiará com QAS.

Como encontrar warehouses qualificados em suas cargas de trabalho

Você pode encontrar os warehouses que mais se beneficiariam com a aceleração de consulta determinando quais deles têm o maior número de consultas elegíveis para aceleração e/ou warehouses com o maior tempo elegível para aceleração de consulta.

  • Identifique os warehouses com mais consultas elegíveis para o Query Acceleration Service no último mês:

    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
  • Identifique os warehouses com mais tempo elegível para o Query Acceleration Service no último mês:

    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

Normalmente, os warehouses que mais se beneficiariam são aqueles que têm o maior número de consultas elegíveis, a maior quantidade de tempo de aceleração de consulta elegível ou uma combinação dos dois. Por exemplo, se um warehouse estiver no topo dos resultados de ambas as consultas acima, esse warehouse pode ser um bom candidato para aceleração de consulta.

Habilitação da aceleração da consulta

Depois de decidir quais warehouses se beneficiariam mais com o Query Acceleration Service, você pode ativar a aceleração de consulta executando a seguinte instrução ALTER WAREHOUSE:

ALTER WAREHOUSE <warehouse_name> SET
  enable_query_acceleration = TRUE;
Copy

Agora que você habilitou QAS para seu(s) warehouse(s), você está pronto para aproveitar a aceleração de consulta para consultas qualificadas.

Limpeza e recursos adicionais

Para limpar, descarte os warehouses criados para este tutorial:

DROP WAREHOUSE noqas_wh;

DROP WAREHOUSE qas_wh;
Copy