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¶
Uma conta Snowflake Enterprise Edition (ou superior)
Uma função com os seguintes privilégios:
Os privilégios necessários para executar os comandos CREATE WAREHOUSE e ALTER WAREHOUSE.
Os privilégios necessários para consultar as exibições do Account Usage no tutorial:
O privilégio necessário para executar as funções de tabela do Information Schema no tutorial:
Conhecimento intermediário de SQL.
Snowsight ou SnowSQL (cliente CLI) para executar comandos SQL.
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;
Nos resultados, selecione uma consulta com o maior valor UPPER_LIMIT_SCALE_FACTOR.
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;
Se você usar esta consulta de exemplo, o WAREHOUSE_SIZE será “X-Small” e UPPER_LIMIT_SCALE_FACTOR será 64.
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;
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;
Selecione um warehouse e execute sua consulta:
Use o warehouse que não tenha o QAS habilitado.
USE WAREHOUSE noqas_wh;
Execute sua consulta de teste (o texto da consulta da etapa anterior).
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();
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.
Use o warehouse com QAS ativado para executar sua consulta:
USE WAREHOUSE qas_wh;
Execute sua consulta de teste (o texto da consulta da etapa anterior).
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();
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;
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.
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' ));
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' ));
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' ));
Adicione o valor
credits_used_total
da primeira consulta ao valorcredits_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;
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;
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;
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;
O que ler depois¶
Para obter mais informações sobre o Query Acceleration Service, consulte Uso do Query Acceleration Service.
Para consultas de exemplo adicionais para identificar consultas e warehouses elegíveis, consulte Identificação de consultas e warehouses que podem se beneficiar da aceleração das consultas.
Para obter mais informações sobre o fator de escala do QAS:
Para obter uma descrição do fator de escala, consulte QUERY_ACCELERATION_MAX_SCALE_FACTOR no tópico CREATE WAREHOUSE.
Para obter mais informações sobre como definir o fator de escala, consulte Ajuste do fator de escala.
Depois de começar a usar o Query Acceleration Service, você pode monitorar o uso e custos do QAS:
Para obter mais informações sobre como monitorar o uso do Query Acceleration Service, consulte Monitoramento do uso do Query Acceleration Services.
Para obter mais informações sobre os custos do serviço, consulte Custo do Query Acceleration Service.
Para ver exemplos de consultas para ajudar a avaliar o desempenho e o custo do QAS, consulte Avaliação do custo e desempenho.