Monitoramento de cargas de trabalho para tabelas híbridas

As cargas de trabalho Unistore que alavancam tabelas híbridas podem ser diferentes de muitas cargas de trabalho analíticas que você está executando no Snowflake. Por exemplo, suas cargas de trabalho podem conter menos consultas exclusivas que levam menos tempo para serem executadas e são executadas com maior frequência. Você tem várias opções para monitorar suas cargas de trabalho.

Monitoramento de cargas de trabalho com exibições do Account Usage

Para monitorar suas cargas de trabalho operacionais de maneira eficaz, use Exibição AGGREGATE_QUERY_HISTORY. Essa exibição permite monitorar a integridade da sua carga de trabalho, diagnosticar problemas e identificar caminhos para otimização. A exibição AGGREGATE_QUERY_HISTORY agrega estatísticas de execução de consulta para uma consulta parametrizada repetida durante um intervalo de tempo para que seja mais fácil e eficiente identificar padrões em suas cargas de trabalho e consultas ao longo do tempo. Observe que todas as cargas de trabalho e consultas do Snowflake serão combinadas na saída desta exibição.

A exibição AGGREGATE_QUERY_HISTORY ajuda você a responder às seguintes perguntas sobre suas cargas de trabalho:

  • Quantas operações por segundo estão sendo executadas no meu warehouse virtual?

  • Quais consultas estão consumindo mais tempo ou recursos em minha carga de trabalho?

  • O desempenho de uma consulta específica mudou substancialmente ao longo do tempo?

Para ajudar a melhorar o desempenho e a eficiência da sua carga de trabalho, as execuções individuais de operações de baixa latência (menos de um segundo) não serão armazenadas em Exibição QUERY_HISTORY nem gerarão um perfil de consulta exclusivo. Em vez disso, as estatísticas agregadas para execuções repetidas dessa consulta serão retornadas na exibição AGGREGATE_QUERY_HISTORY. Você também poderá visualizar um perfil de consulta de amostra para a consulta durante um intervalo de tempo selecionado.

Monitoramento da integridade geral da carga de trabalho

Use a exibição AGGREGATE_QUERY_HISTORY para monitorar a capacidade e a simultaneidade geral da carga de trabalho e para investigar picos ou quedas inesperadas nas cargas de trabalho. Por exemplo:

SELECT
    interval_start_time
    , SUM(calls) as execution_count
    , SUM(calls) / 60 as queries_per_second
    , COUNT(DISTINCT session_id) as unique_sessions
    , COUNT(user_name) as unique_users
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
          AND warehouse_name = '<MY_WAREHOUSE>'
          AND interval_start_time > $START_DATE
          AND interval_start_time < $END_DATE
GROUP BY
          interval_start_time
;
Copy

Você também pode usar o histórico de consultas agregadas para monitorar possíveis problemas com erros, enfileiramento, bloqueio de bloqueio ou limitação. Por exemplo:

WITH time_issues AS
(
    SELECT
        interval_start_time
        , SUM(transaction_blocked_time:"SUM") as transaction_blocked_time
        , SUM(queued_provisioning_time:"SUM") as queued_provisioning_time
        , SUM(queued_repair_time:"SUM") as queued_repair_time
        , SUM(queued_overload_time:"SUM") as queued_overload_time
        , SUM(hybrid_table_requests_throttled_count) as hybrid_table_requests_throttled_count
    FROM snowflake.account_usage.aggregate_query_history
    WHERE TRUE
              AND warehouse_name = '<MY_WAREHOUSE>'
          AND interval_start_time > $START_DATE
          AND interval_start_time < $END_DATE
    GROUP BY ALL
),
errors AS
(
    SELECT
        interval_start_time
        , SUM(value:"count") as error_count
    FROM
    (
        SELECT
            a.interval_start_time
            ,e.*
        FROM
            snowflake.account_usage.aggregate_query_history a,
            TABLE(flatten(input => errors)) e
        WHERE TRUE
            AND interval_start_time > $START_DATE
                  AND interval_start_time < $END_DATE
  )
  GROUP BY ALL
)
    SELECT
        time_issues.interval_start_time
        , error_count
        , transaction_blocked_time
        , queued_provisioning_time
        , queued_repair_time
        , queued_overload_time
        , hybrid_table_requests_throttled_count
    FROM
        time_issues FULL JOIN errors ON errors.interval_start_time = time_issues.interval_start_time
;
Copy

Normalmente, essas métricas devem permanecer baixas. Se você observar um aumento inesperado, é recomendável investigar a causa.

Identificação e investigação de consultas repetidas

Você pode optar por otimizar ou investigar o desempenho de consultas comuns e frequentemente executadas para melhorar a eficiência da sua carga de trabalho. Use a exibição AGGREGATE_QUERY_HISTORY para identificar as principais consultas de uma carga de trabalho por contagem de execução. Por exemplo:

SELECT
    query_parameterized_hash
    , any_value(query_text)
    , SUM(calls) as execution_count
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
          AND warehouse_name = '<MY_WAREHOUSE>'
          AND interval_start_time > '2024-02-01'
          AND interval_start_time < '2024-02-08'
GROUP BY
          query_parameterized_hash
ORDER BY execution_count DESC
;
Copy

Você pode optar por visualizar métricas para as consultas mais lentas. Por exemplo:

SELECT
    query_parameterized_hash
    , any_value(query_text)
    , SUM(total_elapsed_time:"sum"::NUMBER) / SUM (calls) as avg_latency
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
          AND warehouse_name = '<MY_WAREHOUSE>'
          AND interval_start_time > '2024-02-01'
          AND interval_start_time < '2024-02-08'
GROUP BY
          query_parameterized_hash
ORDER BY avg_latency DESC
;
Copy

Você pode analisar o desempenho de uma consulta específica ao longo do tempo para obter insights sobre tendências de latência. Por exemplo:

SELECT
    interval_start_time
    , total_elapsed_time:"avg"::number avg_elapsed_time
    , total_elapsed_time:"min"::number min_elapsed_time
    , total_elapsed_time:"p90"::number p90_elapsed_time
    , total_elapsed_time:"p99"::number p99_elapsed_time
    , total_elapsed_time:"max"::number max_elapsed_time
FROM snowflake.account_usage.aggregate_query_history
WHERE TRUE
          AND query_parameterized_hash = '<123456>'
          AND interval_start_time > '2024-02-01'
          AND interval_start_time < '2024-02-08'
ORDER BY interval_start_time DESC
;
Copy

Esta consulta calcula o tempo total de consulta. Você também pode modificar a consulta para retornar métricas mais granulares nas diferentes fases de uma consulta (compilação, execução, enfileiramento e espera de bloqueio). Estatísticas agregadas serão retornadas para cada fase.