Uso de insights de consulta para melhorar o desempenho

Se houver condições que afetem o desempenho da consulta, o Snowflake fornece insights sobre essas condições. Cada insight inclui uma mensagem que explica como o desempenho da consulta pode ser afetado e fornece uma recomendação geral para melhorar o desempenho.

Você pode acessar esses insights no Snowsight e consultando a exibição QUERY_INSIGHTS.

As próximas seções fornecem detalhes sobre os insights de consulta:

Lista de tipos de insights

O painel Query Insights e a exibição QUERY_INSIGHTS fornecem informações que incluem:

  • Uma mensagem sobre a condição detectada e como ela pode afetar o desempenho da consulta.

  • Detalhes sobre a parte da consulta que produziu a condição.

  • Uma próxima etapa sugerida para abordar a condição, caso ela afete negativamente o desempenho.

A tabela a seguir lista os tipos de insights por ID de tipo.

ID de tipo

Insight

QUERY_INSIGHT_NO_FILTER_ON_TOP_OF_TABLE_SCAN

Sem filtro na verificação da tabela

QUERY_INSIGHT_INAPPLICABLE_FILTER_ON_TABLE_SCAN

Filtro não aplicável

QUERY_INSIGHT_UNSELECTIVE_FILTER

Filtro não seletivo

QUERY_INSIGHT_LIKE_WITH_LEADING_WILDCARD

LIKE filter with leading wildcard

QUERY_INSIGHT_FILTER_WITH_CLUSTERING_KEY

O filtro usa a chave de clustering

QUERY_INSIGHT_SEARCH_OPTIMIZATION_USED

A consulta se beneficiou da otimização de pesquisa

QUERY_INSIGHT_SNOWFLAKE_OPTIMA

Consulta beneficiada do Snowflake Optima

QUERY_INSIGHT_SEARCH_OPTIMIZATION_AND_SNOWFLAKE_OPTIMA

Consulta beneficiada da otimização de pesquisa e do Snowflake Optima

QUERY_INSIGHT_JOIN_WITH_NO_JOIN_CONDITION

Junção sem condição de junção

QUERY_INSIGHT_INEFFICIENT_JOIN_CONDITION

Join with inefficient join condition

QUERY_INSIGHT_NESTED_EXPLODING_JOIN

Junção explosiva (junção aninhada)

QUERY_INSIGHT_EXPLODING_JOIN

Junção explosiva (não aninhada)

QUERY_INSIGHT_INEFFICIENT_AGGREGATE

Agregação desnecessária

QUERY_INSIGHT_UNNECESSARY_UNION_DISTINCT

Cláusula UNION [DISTINCT] desnecessária

QUERY_INSIGHT_REMOTE_SPILLAGE

Vazamento remoto

QUERY_INSIGHT_QUEUED_OVERLOAD

A consulta estava na fila do warehouse por muito tempo

Sem filtro na verificação da tabela

Uma consulta ou subconsulta não tem cláusula WHERE, o que significa que a consulta examina uma tabela inteira e pode retornar mais linhas do que o pretendido.

Para melhorar o desempenho, adicione uma cláusula WHERE para reduzir a quantidade de dados verificados.

Filtro não aplicável

Uma cláusula WHERE não filtra nenhuma linha, o que significa que a consulta pode verificar mais dados do que o pretendido.

Para melhorar o desempenho, adicione uma condição mais seletiva à cláusula WHERE ou torne a condição existente mais seletiva.

Filtro não seletivo

Uma cláusula WHERE não reduz significativamente o número de linhas, o que significa que a consulta pode verificar mais dados do que o pretendido.

Ao contrário do insight Filtro não aplicável, este insight indica que a cláusula WHERE está filtrando algumas linhas, mas poderia ter sido mais seletiva.

Para melhorar o desempenho, adicione uma condição mais seletiva à cláusula WHERE ou torne a condição existente mais seletiva.

LIKE filter with leading wildcard

The query uses a LIKE filter that starts with a wildcard character. Specifying a pattern that starts with a wildcard can result in scanning a large amount of data.

To reduce the amount of data scanned, specify a pattern that does not start with a wildcard, if possible. If you need to specify a pattern that starts with a wildcard, consider enabling search optimization for more efficient pattern matching.

O filtro usa a chave de clustering

A consulta se beneficiou da filtragem em uma chave de clustering para a tabela.

A consulta se beneficiou da otimização de pesquisa

A consulta se beneficiou da filtragem em uma coluna configurada para otimização de pesquisa.

Consulta beneficiada do Snowflake Optima

A consulta se beneficiou do Snowflake Optima.

Consulta beneficiada da otimização de pesquisa e do Snowflake Optima

A consulta se beneficiou da otimização de pesquisa e do Snowflake Optima.

Junção sem condição de junção

A junção não tem a condição de junção. O resultado é uma junção cruzada, que retorna todas as combinações possíveis de linhas.

Para reduzir a contagem de linhas produzida por essa junção, especifique uma ou mais condições de junção.

Join with inefficient join condition

The join contains a complex join condition that is evaluated after the data sets are joined. This is less efficient than if the condition were evaluated before the data sets were joined, which reduces the amount of data that the join must process.

To speed up this query, simplify the join condition.

Junção explosiva (junção aninhada)

Uma junção que inclui a saída de pelo menos uma outra junção está retornando muito mais linhas do que as tabelas que estão sendo unidas. Isso pode indicar um problema com as condições de junção para as junções filhas.

Para evitar que a junção produza mais linhas do que as tabelas unidas contêm, adicione ou altere as condições de junção para as junções filhas. Além disso, adicionar uma cláusula WHERE a uma subconsulta usada em uma junção filha pode reduzir o número de linhas retornadas.

Junção explosiva (não aninhada)

Uma junção de dois conjuntos de dados (por exemplo, tabelas, exibições ou saída de chamadas de função de tabela) está retornando muito mais linhas do que as tabelas unidas contêm. Isso pode indicar um problema com a condição de junção.

Para evitar que a junção produza mais linhas do que as tabelas que estão sendo unidas, adicione ou altere a condição de junção. Além disso, adicionar uma cláusula WHERE a uma subconsulta usada por esta junção pode reduzir o número de linhas retornadas.

Agregação desnecessária

A cláusula DISTINCT ou GROUP BY produz o mesmo número de linhas que a mesma instrução sem a cláusula DISTINCT ou GROUP BY. A especificação da cláusula introduz uma etapa de processamento adicional que não afeta o resultado.

Para melhorar o desempenho, remova a cláusula DISTINCT ou GROUP BY desnecessária.

Cláusula UNION [DISTINCT] desnecessária

A cláusula UNION [ DISTINCT ] não é necessária porque os conjuntos de entrada não são contíguos.

Para melhorar o desempenho, use UNION ALL em vez de UNION [ DISTINCT ].

Vazamento remoto

Essa consulta examinou mais dados do que o warehouse tinha capacidade para armazenar. Como resultado, o warehouse vazou dados para o armazenamento, o que deixou o processamento da consulta mais lento.

Para evitar esse problema, use um warehouse maior com mais capacidade. Se usar um warehouse maior não for uma opção, altere a consulta para processar os dados em lotes menores.

A consulta estava na fila do warehouse por muito tempo

Essa consulta estava esperando o warehouse por muito tempo.

Para evitar esse problema, use um warehouse maior que tenha mais capacidade ou um com menos consultas simultâneas.

Visualização dos insights de consulta no Snowsight

Na guia Query Profile em Query History, você pode visualizar os insights de uma consulta. Os nós que possuem insights correspondentes são destacados.

O painel Query Insights à direita exibe cada tipo de insight que foi detectado para esta consulta e lista cada instância desse tipo de insight que foi detectado para a consulta. Para saber mais sobre a condição detectada, selecione View ao lado de uma entrada no painel Query Insights.

Os detalhes incluem os próximos passos recomendados para melhorar o desempenho da consulta. Você pode selecionar Learn more para visualizar mais informações sobre esse insight.

Limitações

  • Os insights são produzidos para consultas SQL feitas em bancos de dados e processadas por warehouses.

  • Os insights não são produzidos para:

    • Consultas que potencialmente se beneficiam do serviço de aceleração de consultas.

    • Consultas para as quais o plano de consulta leva vários etapas para terminar.

    • Consultas que envolvem objetos seguros.

    • Consultas executadas em tabelas híbridas (Unistore).

    • Consultas geradas por aplicativos nativos.

    • Consultas EXPLAIN.

    • Consultas que reutilizam resultados.

    • Queries executing on interactive tables.