Monitore as cargas de trabalho de tabelas híbridas

As cargas de trabalho Unistore que utilizam tabelas híbridas serão 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 executadas com maior frequência. Você tem várias opções para monitorar suas cargas de trabalho.

Monitoramento de transações

As tabelas híbridas oferecem suporte a recursos de monitoramento de transações do Snowflake, incluindo SHOW TRANSACTIONS, DESCRIBE TRANSACTION, SHOW LOCKS e LOCK WAIT HISTORY.

O comportamento desses comandos e exibições para tabelas híbridas é consistente com o comportamento das tabelas Snowflake padrão, exceto pelas seguintes alterações:

  • Um novo tipo de bloqueio ROW é introduzido no comando SHOW LOCKS para representar bloqueios de linha em tabelas híbridas. Os bloqueios são resumidos para mostrar uma transação contendo (um ou vários) bloqueios de linha e outra transação aguardando por esses bloqueios.

  • LOCK WAIT HISTORY não mostra informações relacionadas ao esquema.

  • LOCK_WAIT_HISTORY não resume BLOCKER_QUERIES. Se uma consulta for bloqueada por vários bloqueadores, eles aparecerão como vários registros na exibição, em vez de como várias entradas na matriz BLOCKER_QUERIES JSON para o único registro de espera.

  • Para o resultado de SHOW LOCKS e a exibição LOCK_WAIT_HISTORY:

    • À medida que os bloqueios de linha são resumidos, presume-se que a transação que mantém o bloqueio adquire o bloqueio quando é iniciada.

    • Devido ao potencial alto volume de transações Unistore, apenas os bloqueios que bloquearam outra(s) transação(ões) por um período prolongado (aproximadamente 5 segundos) são mostrados.

    • A transação em espera de bloqueio ainda pode parecer estar aguardando os bloqueios, mesmo que os tenha adquirido (por não mais que 1 minuto). A precisão dos relatórios de bloqueio melhorará em versões futuras.

    • Se uma instrução que bloqueou uma consulta em espera tiver sido concluída e for uma consulta de execução curta em tabelas híbridas, as seguintes informações da consulta bloqueadora não serão mostradas no campo BLOCKER_QUERY do registro da consulta em espera:

      • UUID da consulta do bloqueador

      • ID da sessão da consulta do bloqueador

      • Nome de usuário da consulta do bloqueador

      • ID do banco de dados da consulta do bloqueador

      • Nome do banco de dados da consulta do bloqueador

Monitoramento de cargas de trabalho

Para monitorar suas cargas de trabalho operacionais de forma eficaz, use a exibição 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. Para obter mais informações sobre este comportamento, consulte Notas de uso.

Dica

É possível usar a exibição Histórico de consultas agrupadas no Snowsight para visualizar o desempenho e as estatísticas de cargas de trabalho típicas de tabelas híbridas. Esta exibição não captura toda a atividade da tabela híbrida, mas oferece uma boa alternativa para monitorar o desempenho de um grande volume de consultas individuais que são um tanto repetitivas e executadas com extrema rapidez.

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 warehouse_name = '<MY_WAREHOUSE>'
  AND interval_start_time > $START_DATE
  AND interval_start_time < $END_DATE
GROUP BY ALL;
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 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 interval_start_time > $START_DATE
          AND interval_start_time < $END_DATE
  )
  GROUP BY ALL
)
    SELECT
        ts.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 ts
    FULL JOIN errors e ON e.interval_start_time = ts.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.