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:
Entre em Snowsight.
Selecione Monitoring » Query History.
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.
Se você quiser se concentrar nas consultas de um determinado usuário, use o menu suspenso User para selecionar o usuário.
Se você quiser se concentrar nas consultas que foram feitas em um determinado warehouse, selecione Filters » Warehouse e então selecione o warehouse.
- Warehouses:
Entre em Snowsight.
Mude para uma função que tenha privilégios para o warehouse.
Selecione Admin » Warehouses.
Selecione um warehouse.
Use o gráfico Warehouse Activity para visualizar a carga do warehouse, incluindo se as consultas foram colocadas em fila.
- Tarefas:
Entre em Snowsight.
Selecione Monitoring » 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:
Entre em Snowsight.
Selecione Monitoring » Query History.
Selecione a ID de uma consulta.
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 |
---|---|---|
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 |
|
Usado para analisar a carga de trabalho em um warehouse dentro de um intervalo de datas especificado. |
Até 3 horas |
|
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;
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;
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;
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);
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;
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;