Uso do Query Acceleration Service

O Query Acceleration Service pode acelerar partes da carga de trabalho da consulta em um warehouse. Quando ativado para um warehouse, ele pode melhorar o desempenho geral do warehouse reduzindo o impacto de consultas externas, que são consultas que utilizam mais recursos do que a consulta típica. O Query Acceleration Service faz isto descarregando partes do trabalho de processamento de consultas para compartilhar recursos computacionais que são fornecidos pelo serviço.

Exemplos dos tipos de cargas de trabalho que podem se beneficiar do Query Acceleration Service incluem:

  • Análise ad hoc.

  • Cargas de trabalho com volume de dados imprevisíveis por consulta.

  • Consultas com grandes verificações e filtros seletivos.

O Query Acceleration Service pode lidar com estes tipos de cargas de trabalho de forma mais eficiente, realizando mais trabalho em paralelo e reduzindo o tempo gasto em verificações e filtragem.

Nota

O Query Acceleration Service depende da disponibilidade do servidor. Portanto, as melhorias de desempenho podem oscilar ao longo do tempo.

Neste tópico:

Identificação de consultas e warehouses que podem se beneficiar da aceleração das consultas

Para identificar as consultas que podem se beneficiar do Query Acceleration Service, você pode usar a função SYSTEM$ESTIMATE_QUERY_ACCELERATION ou consultar a função Exibição QUERY_ACCELERATION_ELIGIBLE. A exibição QUERY_ACCELERATION_ELIGIBLE também identifica os warehouses que podem se beneficiar do Query Acceleration Service.

Consultas não qualificadas

Algumas consultas não são qualificadas para aceleração de consulta. As seguintes são razões comuns pelas quais uma consulta não pode ser acelerada:

  • Não há filtros ou agregação (por exemplo, GROUP BY). O Query Acceleration Service é atualmente incapaz de acelerar tais consultas.

  • Os filtros não são suficientemente seletivos. Como alternativa, a expressão GROUP BY tem um alto grau de cardinalidade.

  • Não há partições suficientes. O benefício da aceleração de consulta seria compensado pela latência na aquisição de servidores adicionais para o serviço se não houvesse partições suficientes para varredura.

  • O Query Acceleration Service não acelera consultas em tabelas que tenham otimização de pesquisa habilitada.

  • A consulta inclui uma cláusula LIMIT. No entanto, uma cláusula LIMIT com uma cláusula ORDER BY é suportada.

Identificação de consultas com a função SYSTEM$ESTIMATE_QUERY_ACCELERATION

A função SYSTEM$ESTIMATE_QUERY_ACCELERATION pode ajudar a determinar se uma consulta previamente executada pode se beneficiar do Query Acceleration Service. Se a consulta for elegível para aceleração de consulta, a função retorna o tempo estimado de execução da consulta para diferentes fatores de escala da aceleração de consultas.

Exemplo

Execute a seguinte instrução para ajudar a determinar se a aceleração da consulta pode beneficiar uma consulta específica:

select parse_json(system$estimate_query_acceleration('8cd54bf0-1651-5b1c-ac9c-6a9582ebd20f'));
Copy

Neste exemplo, a consulta é elegível para o Query Acceleration Service e inclui tempos estimados de consulta usando o serviço:

{
  "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

O exemplo a seguir mostra os resultados para uma consulta que não é elegível para o Query Acceleration Service:

select parse_json(system$estimate_query_acceleration('cf23522b-3b91-cf14-9fe0-988a292a4bfa'));
Copy

A instrução acima produz a seguinte saída:

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

Identificação de consultas e warehouses com a exibição QUERY_ACCELERATION_ELIGIBLE

Consulte o Exibição QUERY_ACCELERATION_ELIGIBLE para identificar as consultas e warehouses que podem se beneficiar ao máximo do Query Acceleration Service. Para cada consulta, a exibição inclui a quantidade de tempo de execução da consulta que é elegível para o Query Acceleration Service.

Exemplos

Nota

Os exemplos também consideram que a função ACCOUNTADMIN (ou uma função que possui PRIVILEGES IMPORTED no banco de dados SNOWFLAKE) está em uso. Se não estiverem em uso, execute o seguinte comando antes de executar as consultas nos exemplos:

USE ROLE ACCOUNTADMIN;
Copy

Identifique as consultas que mais se beneficiariam do serviço pela quantidade de tempo de execução da consulta que é qualificado para aceleração:

SELECT query_id, eligible_query_acceleration_time
FROM snowflake.account_usage.query_acceleration_eligible
ORDER BY eligible_query_acceleration_time DESC;
Copy

Identificar as consultas que mais podem se beneficiar do serviço em um warehouse específico 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

Identifique os warehouses em um determinado período de tempo com o maior número de consultas elegíveis para o Query Acceleration Service:

SELECT warehouse_name, COUNT(query_id) AS num_eligible_queries
FROM snowflake.account_usage.query_acceleration_eligible
WHERE start_time > 'Tue, 18 January 2022 12:00:00'::timestamp
AND end_time < 'Tue, 19 January 2022 00:00:00'::timestamp
GROUP BY warehouse_name
ORDER BY num_eligible_queries DESC;
Copy

Identifique os warehouses que podem se beneficar do Query Acceleration Service. Para cada warehouse, calcule o tempo total de execução da consulta elegível para aceleração:

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

Identifique o fator de escala do limite superior para o Query Acceleration Service para um determinado warehouse:

SELECT MAX(upper_limit_scale_factor)
FROM snowflake.account_usage.query_acceleration_eligible
WHERE warehouse_name = 'mywh';
Copy

Habilitação da aceleração da consulta

Habilite o Query Acceleration Service especificando ENABLE_QUERY_ACCELERATION = TRUE ao criar um warehouse (usando CREATE WAREHOUSE) ou mais tarde (usando ALTER WAREHOUSE).

Nota

O Query Acceleration Service não acelera consultas em tabelas que tenham otimização de pesquisa habilitada.

Comandos SQL com suporte

O Query Acceleration Service oferece suporte aos seguintes comandos SQL:

  • SELECT

  • INSERT (quando a instrução contém uma instrução SELECT)

  • CREATE TABLE AS SELECT (CTAS)

Uma consulta, ou parte de uma consulta (isto é, subconsulta ou cláusula), com um comando SQL suportado pode ser acelerada pelo Query Acceleration Service, se for elegível para aceleração.

Exemplos

O exemplo a seguir habilita o Query Acceleration Service para um warehouse chamado my_wh:

create warehouse my_wh with
  ENABLE_QUERY_ACCELERATION = true;
Copy

Execute o comando SHOW WAREHOUSES para exibir detalhes sobre o warehouse 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

O Query Acceleration Service pode aumentar a taxa de consumo de crédito de um warehouse. O fator de escala máximo pode ajudar a limitar a taxa de consumo. Consulte CREATE WAREHOUSE ou ALTER WAREHOUSE para mais detalhes sobre a propriedade QUERY_ACCELERATION_MAX_SCALE_FACTOR.

A exibição QUERY_ACCELERATION_ELIGIBLE e a função SYSTEM$ESTIMATE_QUERY_ACCELERATION podem ser úteis para determinar um fator de escala apropriado para um warehouse. Consulte Identificação de consultas e warehouses que podem se beneficiar da aceleração das consultas (neste tópico) para obter mais detalhes.

Ajuste do fator de escala

O fator de escala é um mecanismo de controle de custos que permite definir um limite superior da quantidade de recursos de computação que um warehouse pode alugar para a aceleração da consulta. Este valor é utilizado como um multiplicador baseado no tamanho e custo do warehouse.

Por exemplo, suponha que você defina o fator de escala como 5 para um warehouse médio. Isto significa que:

  • O warehouse pode alugar recursos de computação até 5 vezes o tamanho de um warehouse médio.

  • Como um warehouse médio custa 4 créditos por hora, o aluguel destes recursos pode custar até 20 créditos adicionais por hora (4 créditos por warehouse x 5 vezes seu tamanho).

O custo é o mesmo, não importa quantas consultas estejam usando o Query Acceleration Service ao mesmo tempo. O Query Acceleration Service é faturado por segundo, somente quando o serviço está em uso. Estes créditos são faturados separadamente do uso do warehouse.

Nem todas as consultas requerem o conjunto completo de recursos que são disponibilizados pelo fator de escala. A quantidade de recursos solicitados para o serviço depende de quanto da consulta é elegível para aceleração e quantos dados serão processados para respondê-la. Independentemente do valor do fator de escala ou a quantidade de recursos solicitados, a quantidade de recursos de computação disponíveis para aceleração da consulta é limitada pela disponibilidade de recursos no serviço e o número de outras solicitações simultâneas. O Query Acceleration Service utiliza apenas tantos recursos quantos forem necessários e que estão disponíveis no momento em que a consulta é executada.

Se o fator de escala não estiver explicitamente definido, o valor padrão será 8. Definir o fator de escala como 0 elimina o limite superior e permite que as consultas aluguem tantos recursos quantos forem necessários e disponíveis para atender à consulta.

Exemplo

O exemplo a seguir modifica o warehouse chamado my_wh para habilitar o Query Acceleration Service para um fator de escala máximo de 0.

alter warehouse my_wh set
  ENABLE_QUERY_ACCELERATION = true
  QUERY_ACCELERATION_MAX_SCALE_FACTOR = 0;
Copy

Monitoramento do uso do Query Acceleration Services

Uso da interface da Web para monitorar o uso da aceleração da consulta

Uma vez ativado o Query Acceleration Service, você pode visualizar o painel Profile Overview em Query Profile para ver os efeitos dos resultados da aceleração de consulta.

A captura de tela a seguir mostra um exemplo das estatísticas exibidas para a consulta em geral. Se várias operações em uma consulta foram aceleradas, os resultados são agregados nesta exibição para que você possa ver a quantidade total de trabalho realizado pelo Query Acceleration Service.

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

A seção Query Acceleration do painel Profile Overview inclui as seguintes estatísticas:

  • Partitions scanned by service — número de arquivos descarregados para verificação no Query Acceleration Service.

  • Scans selected for acceleration — número de verificações de tabela sendo aceleradas.

Nos detalhes do operador (consulte Visão geral do perfil/Detalhes do operador para mais informações), clique no operador para ver informações detalhadas. A seguinte captura de tela mostra um exemplo das estatísticas exibidas para uma operação TableScan:

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

A seção Query Acceleration do painel de detalhes TableScan inclui as seguintes estatísticas:

  • Partitions scanned by service — número de arquivos descarregados para verificação no Query Acceleration Service.

Uso da exibição QUERY_HISTORY de Account Usage para monitorar o uso da aceleração da consulta

Para ver os efeitos da aceleração de uma consulta, use as seguintes colunas no Exibição QUERY_HISTORY.

  • QUERY_ACCELERATION_BYTES_SCANNED

  • QUERY_ACCELERATION_PARTITIONS_SCANNED

  • QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

Você pode usar estas colunas para identificar as consultas que se beneficiaram com o Query Acceleration Service. Para cada consulta, você também pode determinar o número total de partições e bytes verificados pelo Query Acceleration Service.

Para descrições de cada uma dessas colunas, consulte Exibição QUERY_HISTORY.

Por exemplo, para encontrar as consultas com mais bytes verificados pelo Query Acceleration Service nas últimas 24 horas:

SELECT * 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

Para encontrar as consultas com o maior número de partições verificadas pelo Query Acceleration Service nas últimas 24 horas:

SELECT * 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

Custo do Query Acceleration Service

O Query Acceleration consome créditos pois utiliza recursos de computação sem servidor para executar porções de consultas elegíveis.

O Query Acceleration Service é cobrado como outros recursos sem servidor no Snowflake em que você paga por segundo pelos recursos de computação utilizados. Para saber quantos créditos por hora-computador são consumidos pelo Query Acceleration Service, consulte a “Tabela de crédito de recursos sem servidor” na Tabela de consumo de serviço do Snowflake.

Visualização de informações de faturamento no console clássico

Se você tiver o Query Acceleration Service habilitado para sua conta, a página de faturamento na Classic Console incluirá um warehouse chamado QUERY_ACCELERATION que mostra todos os créditos utilizados pelo serviço em todos os warehouses de sua conta.

A captura de tela abaixo mostra um exemplo das informações de faturamento exibidas para o warehouse QUERY_ACCELERATION:

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

Visualização do faturamento usando a exibição QUERY_ACCELERATION_HISTORY do Account Usage

Você pode visualizar os dados de faturamento no Account Usage Exibição QUERY_ACCELERATION_HISTORY.

Exemplo

Esta consulta retorna o número total de créditos utilizados por cada warehouse em sua conta para o Query Acceleration Service (mês até a data):

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

Visualização do faturamento usando a função QUERY_ACCELERATION_HISTORY

Você também pode visualizar os dados de faturamento usando a função QUERY_ACCELERATION_HISTORY do Information Schema.

Exemplo

O exemplo seguinte utiliza a função QUERY_ACCELERATION_HISTORY para retornar informações sobre as consultas aceleradas por esse serviço dentro das últimas 12 horas:

select * from
table(information_schema.query_acceleration_history(
  date_range_start=>dateadd(H, -12, current_timestamp)));
Copy