Como explorar os tempos de execução

Este tópico explica como examinar o desempenho anterior de consultas e tarefas. Estas informações ajudam a identificar os candidatos para otimização de desempenho e permitem que você veja se suas estratégias de otimização estão tendo o efeito desejado.

Você pode explorar o desempenho histórico usando Snowsight ou escrevendo consultas em exibições no esquema ACCOUNT_USAGE. Um usuário sem acesso ao esquema ACCOUNT_USAGE pode consultar dados similares usando o Information Schema.

Como ver os tempos de execução e carga

Você pode usar Snowsight para obter insights visuais sobre o desempenho de consultas e tarefas, bem como a carga de um warehouse.

Consultas
  1. Entre em Snowsight.

  2. Selecione Activity » Query History.

  3. Use a coluna Duration para entender quanto tempo levou para executar uma consulta. Você pode ordenar a coluna para encontrar as consultas que duraram mais tempo.

  4. Se você quiser se concentrar nas consultas de um determinado usuário, use o menu suspenso User para selecionar o usuário.

  5. Se você quiser se concentrar nas consultas que foram feitas em um determinado warehouse, selecione Filters » Warehouse e então selecione o warehouse.

Warehouses
  1. Entre em Snowsight.

  2. Mude para uma função que tenha privilégios para o warehouse.

  3. Selecione Admin » Warehouses.

  4. Selecione um warehouse.

  5. Use o gráfico Warehouse Activity para visualizar a carga do warehouse, incluindo se as consultas foram colocadas em fila.

Tarefas
  1. Entre em Snowsight.

  2. Selecione Activity » Task History para ver quanto tempo levou para executar o código SQL de uma tarefa.

Como explorar os tempos de execução

O Perfil de consulta permite que você examine quais partes de uma consulta estão demorando mais tempo para ser executada. Isso inclui um painel Most Expensive Nodes que identifica os nós do operador que estão demorando mais tempo para executar. Você pode explorar ainda mais, vendo qual porcentagem do tempo de execução de um nó foi gasto em uma categoria específica de processamento de consultas.

Para acessar o perfil de consulta para uma consulta:

  1. Entre em Snowsight.

  2. Selecione Activity » Query History.

  3. Selecione a ID de uma consulta.

  4. Selecione a guia Query Profile.

Dica

Você pode programar o acesso às estatísticas de desempenho do Perfil de consulta executando a função GET_QUERY_OPERATOR_STATS.

Como escrever consultas para explorar os tempos de execução

O esquema Account Usage contém exibições relacionadas aos tempos de execução das consultas e tarefas. Ele também contém uma exibição relacionada à carga de um warehouse, uma vez que executa as consultas. Você pode escrever consultas nessas exibições para detalhar os dados de desempenho e criar relatórios e painéis de controle personalizados.

Por padrão, somente o administrador de conta (ou seja, usuário com a função ACCOUNTADMIN) pode acessar exibições no esquema ACCOUNT_USAGE. Para permitir que outros usuários tenham acesso a essas exibições, consulte Habilitação do uso do banco de dados SNOWFLAKE para outras funções.

Usuários sem acesso ao esquema ACCOUNT_USAGE (por exemplo, um usuário que executou uma consulta ou um administrador de warehouse) ainda podem retornar tempos de execução recentes e outros metadados de consulta usando as funções de tabela QUERY_HISTORY do Information Schema.

Esteja ciente de que as exibições ACCOUNT_USAGE não são atualizadas imediatamente após a execução de uma consulta ou tarefa. Se você quiser verificar o tempo de execução de uma consulta logo após executá-la, use Snowsight para visualizar seu desempenho. O Information Schema também é atualizado mais rapidamente do que as exibições ACCOUNT_USAGE.

Exibição ACCOUNT_USAGE

Descrição

Latência

QUERY_HISTORY

Usada para analisar o histórico de consultas do Snowflake por várias dimensões (intervalo de tempo, tempo de execução, sessão, usuário, warehouse etc.) nos últimos 365 dias (1 ano).

Até 45 minutos

WAREHOUSE_LOAD_HISTORY

Usado para analisar a carga de trabalho em um warehouse dentro de um intervalo de datas especificado.

Até 3 horas

TASK_HISTORY

Usada para recuperar o histórico de utilização da tarefa nos últimos 365 dias (1 ano).

Até 45 minutos

Consultas de exemplo

As seguintes consultas no esquema ACCOUNT_USAGE fornecem uma visão do desempenho anterior de consultas, warehouses e tarefas. Clique no nome de uma consulta para ver o exemplo completo de SQL.

Desempenho da consulta
Carga do warehouse
Desempenho da tarefa

Desempenho da consulta

Consulta: n consultas com execução mais longa

Esta consulta fornece uma lista dos n primeiras consultas (50 no exemplo abaixo) mais longas no último dia. Você pode ajustar a função DATEADD para se concentrar em um período mais curto ou mais longo. Substitua my_warehouse pelo nome de um warehouse.

SELECT query_id,
  ROW_NUMBER() OVER(ORDER BY partitions_scanned DESC) AS query_id_int,
  query_text,
  total_elapsed_time/1000 AS query_execution_time_seconds,
  partitions_scanned,
  partitions_total,
FROM snowflake.account_usage.query_history Q
WHERE warehouse_name = 'my_warehouse' AND TO_DATE(Q.start_time) > DATEADD(day,-1,TO_DATE(CURRENT_TIMESTAMP()))
  AND total_elapsed_time > 0 --only get queries that actually used compute
  AND error_code IS NULL
  AND partitions_scanned IS NOT NULL
ORDER BY total_elapsed_time desc
LIMIT 50;
Copy
Consulta: Consultas organizadas por tempo de execução no último mês

Esta consulta agrupa as consultas para um determinado warehouse por buckets para tempo de execução durante o último mês. Estas tendências no tempo de conclusão da consulta podem ajudar a informar as decisões de redimensionamento de warehouses ou separar algumas consultas para outro warehouse. Substitua MY_WAREHOUSE pelo nome de um warehouse.

SELECT
  CASE
    WHEN Q.total_elapsed_time <= 60000 THEN 'Less than 60 seconds'
    WHEN Q.total_elapsed_time <= 300000 THEN '60 seconds to 5 minutes'
    WHEN Q.total_elapsed_time <= 1800000 THEN '5 minutes to 30 minutes'
    ELSE 'more than 30 minutes'
  END AS BUCKETS,
  COUNT(query_id) AS number_of_queries
FROM snowflake.account_usage.query_history Q
WHERE  TO_DATE(Q.START_TIME) >  DATEADD(month,-1,TO_DATE(CURRENT_TIMESTAMP()))
  AND total_elapsed_time > 0
  AND warehouse_name = 'my_warehouse'
GROUP BY 1;
Copy
Consulta: Como encontrar consultas repetidas de longa duração

Você pode usar o hash de consulta (o valor da coluna query_hash na exibição ACCOUNT_USAGE QUERY_HISTORY) para encontrar padrões no desempenho da consulta que podem não ser óbvios. Por exemplo, embora uma consulta possa não ser excessivamente cara durante uma única execução, uma consulta repetida com frequência pode levar a custos elevados, com base no número de vezes que a consulta é executada.

Você pode usar o hash de consulta para identificar as consultas nas quais você deve se concentrar primeiro na otimização. Por exemplo, a consulta a seguir usa o valor na coluna query_hash para identificar os IDs de consulta para as 100 consultas de execução mais longas:

SELECT
    query_hash,
    COUNT(*),
    SUM(total_elapsed_time),
    ANY_VALUE(query_id)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE warehouse_name = 'MY_WAREHOUSE'
    AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 7
  GROUP BY query_hash
  ORDER BY SUM(total_elapsed_time) DESC
  LIMIT 100;
Copy
Consulta: Rastreamento do desempenho médio de uma consulta ao longo do tempo

A instrução a seguir calcula o tempo decorrido total médio diário para todas as consultas que possuem um hash de consulta parametrizado específico (cbd58379a88c37ed6cc0ecfebb053b03).

SELECT
    DATE_TRUNC('day', start_time),
    SUM(total_elapsed_time),
    ANY_VALUE(query_id)
  FROM SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY
  WHERE query_parameterized_hash = 'cbd58379a88c37ed6cc0ecfebb053b03'
    AND DATE_TRUNC('day', start_time) >= CURRENT_DATE() - 30
  GROUP BY DATE_TRUNC('day', start_time);
Copy

Carga do warehouse

Consulta: Carga total do warehouse

Esta consulta fornece insights sobre a carga total de um warehouse para consultas executadas e em fila. Esses valores de carga de consulta representam a relação do tempo total de execução (em segundos) de todas as consultas em um estado específico em um intervalo pelo tempo total (em segundos) desse intervalo.

Por exemplo, se 276 segundos for o tempo total para 4 consultas em um intervalo de 5 minutos (300 segundos), então o valor de carga da consulta será 276 / 300 = 0,92.

 SELECT TO_DATE(start_time) AS date,
  warehouse_name,
  SUM(avg_running) AS sum_running,
  SUM(avg_queued_load) AS sum_queued
FROM snowflake.account_usage.warehouse_load_history
WHERE TO_DATE(start_time) >= DATEADD(month,-1,CURRENT_TIMESTAMP())
GROUP BY 1,2
HAVING SUM(avg_queued_load) >0;
Copy

Desempenho da tarefa

Consulta: Tarefas com execução mais longa

Esta consulta lista as tarefas de execução mais longa do último dia, que podem indicar uma oportunidade de otimizar o SQL que está sendo executado pela tarefa.

SELECT DATEDIFF(seconds, query_start_time,completed_time) AS duration_seconds,*
FROM snowflake.account_usage.task_history
WHERE state = 'SUCCEEDED'
  AND query_start_time >= DATEADD (day, -1, CURRENT_TIMESTAMP())
ORDER BY duration_seconds DESC;
Copy