Esquema:

ACCOUNT_USAGE

Exibição AGGREGATE_QUERY_HISTORY

Essa exibição do Account Usage permite monitorar e rastrear a execução de instruções ao longo do tempo. Ela contém dados semelhantes à exibição QUERY_HISTORY, mas é agregada em intervalos de um minuto para instruções SQL repetidas. Você pode usar essa exibição para monitorar sua carga de trabalho e analisar o desempenho.

Além das consultas em tabelas híbridas, todas as consultas executadas no Snowflake são incluídas em AGGREGATE_QUERY_HISTORY. No entanto, AGGREGATE_QUERY_HISTORY é especialmente útil para monitorar e analisar cargas de trabalho Unistore que executam repetidamente um pequeno número de instruções distintas com alto rendimento.

Colunas

Nome da coluna

Tipo de dados

Descrição

CALLS

NUMBER

Número de vezes que a instrução (consulta + plano de consulta) foi executada no intervalo de agregação.

INTERVAL_START_TIME

TIMESTAMP_LTZ

Hora de início da janela de medição (no fuso horário local).

INTERVAL_END_TIME

TIMESTAMP_LTZ

Hora de fim da janela de medição (no fuso horário local).

QUERY_PARAMETERIZED_HASH

TEXT

ID exclusivo para identificar consultas parametrizadas idênticas. Consulte Coluna QUERY_PARAMETERIZED_HASH.

QUERY_TEXT

TEXT

Texto de amostra da instrução SQL.

DATABASE_ID

NUMBER

Identificador interno/gerado pelo sistema para o banco de dados que estava em uso.

DATABASE_NAME

TEXT

Banco de dados que estava em uso no momento da consulta.

SCHEMA_ID

NUMBER

Identificador interno/gerado pelo sistema para o esquema que estava em uso.

SCHEMA_NAME

TEXT

Esquema que estava em uso no momento da consulta.

QUERY_TYPE

TEXT

DML, consulta etc. Se a consulta tiver falhado, o tipo de consulta pode ser UNKNOWN.

SESSION_ID

NUMBER

Sessão que executou a instrução.

USER_NAME

TEXT

Usuário que emitiu a consulta.

ROLE_NAME

TEXT

Função que estava ativa na sessão no momento da consulta.

ROLE_TYPE

TEXT

Especifica um APPLICATION, DATABASE_ROLE ou ROLE que executou a consulta.

WAREHOUSE_ID

NUMBER

Identificador interno/gerado pelo sistema do warehouse que foi utilizado.

WAREHOUSE_NAME

TEXT

Warehouse em que a consulta foi executada, se houver.

WAREHOUSE_SIZE

TEXT

Tamanho do warehouse quando esta instrução foi executada.

WAREHOUSE_TYPE

TEXT

Tipo do warehouse quando esta instrução foi executada.

QUERY_TAG

TEXT

Tag de consulta definida para esta instrução pelo parâmetro de sessão QUERY_TAG.

IS_CLIENT_GENERATED_STATEMENT

BOOLEAN

Indica se a consulta foi gerada pelo cliente.

RELEASE_VERSION

TEXT

Versão de lançamento no formato de major_release.minor_release.patch_release.

ERRORS

ARRAY

Lista de códigos de erro e mensagens que ocorreram durante o intervalo de agregação. Cada erro está no formato {"code": "code1", "message": "msg1", "count": 10}.

TOTAL_ELAPSED_TIME

OBJECT

Tempo transcorrido (em milissegundos).

BYTES_SCANNED

OBJECT

Número de bytes digitalizados por esta instrução.

PERCENTAGE_SCANNED_FROM_CACHE

OBJECT

A porcentagem de dados escaneados a partir do cache de disco local. O valor varia de 0,0 a 1,0. Multiplique por 100 para obter uma porcentagem verdadeira.

BYTES_WRITTEN

OBJECT

Número de bytes escritos (por exemplo, ao carregar em uma tabela).

BYTES_WRITTEN_TO_RESULT

OBJECT

Número de bytes gravados em um objeto de resultado. Por exemplo, select * from . . . produziria um conjunto de resultados em formato tabular representando cada campo na seleção. . . Em geral, o objeto de resultado representa o que for produzido como resultado da consulta, e BYTES_WRITTEN_TO_RESULT representa o tamanho do resultado retornado.

BYTES_READ_FROM_RESULT

OBJECT

Número de bytes lidos de um objeto resultado.

ROWS_PRODUCED

OBJECT

Número de linhas produzidas por esta instrução.

ROWS_INSERTED

OBJECT

Número de linhas inseridas pela consulta.

ROWS_UPDATED

OBJECT

Número de linhas atualizadas pela consulta.

ROWS_DELETED

OBJECT

Número de linhas excluídas pela consulta.

ROWS_UNLOADED

OBJECT

Número de linhas descarregadas durante a exportação de dados.

BYTES_DELETED

OBJECT

Número de bytes excluídos pela consulta.

PARTITIONS_SCANNED

OBJECT

Número de micropartições escaneadas.

PARTITIONS_TOTAL

OBJECT

Total de micropartições de todas as tabelas incluídas nesta consulta.

BYTES_SPILLED_TO_LOCAL_STORAGE

OBJECT

Volume de dados despejados em disco local.

BYTES_SPILLED_TO_REMOTE_STORAGE

OBJECT

Volume de dados despejados em disco remoto.

BYTES_SENT_OVER_THE_NETWORK

OBJECT

Volume de dados enviados pela rede.

COMPILATION_TIME

OBJECT

Tempo de compilação (em milissegundos).

EXECUTION_TIME

OBJECT

Tempo de execução (em milissegundos).

QUEUED_PROVISIONING_TIME

OBJECT

Tempo (em milissegundos) gasto na fila do warehouse, esperando que o warehouse compute recursos para provisionar, devido à criação, retomada ou redimensionamento do warehouse.

QUEUED_REPAIR_TIME

OBJECT

Tempo (em milissegundos) gasto na fila do warehouse, esperando que os recursos computados no warehouse sejam reparados.

QUEUED_OVERLOAD_TIME

OBJECT

Tempo (em milissegundos) gasto na fila de espera do warehouse, devido à sobrecarga do warehouse devido à carga de trabalho atual da consulta.

TRANSACTION_BLOCKED_TIME

OBJECT

Tempo (em milissegundos) gasto bloqueado por um DML concorrente.

OUTBOUND_DATA_TRANSFER_CLOUD

TEXT

Provedor de nuvem de destino para instruções que descarregam dados para outra região e/ou nuvem.

OUTBOUND_DATA_TRANSFER_REGION

TEXT

Região de destino para instruções que descarregam dados para outra região e/ou nuvem.

OUTBOUND_DATA_TRANSFER_BYTES

OBJECT

Número de bytes transferidos em instruções que descarregam dados para outra região e/ou nuvem.

INBOUND_DATA_TRANSFER_CLOUD

TEXT

Provedor de nuvem de origem para instruções que carregam dados de outra região e/ou nuvem.

INBOUND_DATA_TRANSFER_REGION

TEXT

Região de origem para instruções que carregam dados de outra região e/ou nuvem.

INBOUND_DATA_TRANSFER_BYTES

OBJECT

Número de bytes transferidos em uma operação de replicação de outra conta. A conta de origem pode estar na mesma região ou em uma região diferente da conta atual.

LIST_EXTERNAL_FILES_TIME

OBJECT

Tempo (em milissegundos) gasto listando arquivos externos.

CREDITS_USED_CLOUD_SERVICES

OBJECT

Número de créditos usados para serviços de nuvem.

EXTERNAL_FUNCTION_TOTAL_INVOCATIONS

OBJECT

Número agregado de vezes que esta consulta chamou serviços remotos. Para obter detalhes importantes, consulte as Notas de uso.

EXTERNAL_FUNCTION_TOTAL_SENT_ROWS

OBJECT

Número total de linhas que esta consulta enviou em todas as chamadas para todos os serviços remotos.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_ROWS

OBJECT

Número total de linhas que esta consulta recebeu de todas as chamadas para todos os serviços remotos.

EXTERNAL_FUNCTION_TOTAL_SENT_BYTES

OBJECT

Número total de bytes que esta consulta enviou em todas as chamadas para todos os serviços remotos.

EXTERNAL_FUNCTION_TOTAL_RECEIVED_BYTES

OBJECT

Número total de bytes que esta consulta recebeu de todas as chamadas para todos os serviços remotos.

QUERY_LOAD_PERCENT

OBJECT

A porcentagem aproximada de recursos de computação ativos no warehouse para a execução desta consulta.

QUERY_ACCELERATION_BYTES_SCANNED

OBJECT

Número de bytes digitalizados por Query Acceleration Service.

QUERY_ACCELERATION_PARTITIONS_SCANNED

OBJECT

Número de partições digitalizadas por Query Acceleration Service.

QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

OBJECT

Fator de escala no limite superior do qual uma consulta teria se beneficiado.

CHILD_QUERIES_WAIT_TIME

OBJECT

Tempo (em milissegundos) para completar a pesquisa em cache ao chamar uma função memoizável.

HYBRID_TABLE_REQUESTS_THROTTLED_COUNT

NUMBER

Número de consultas de tabela híbrida que foram limitadas.

OWNER_ROLE_TYPE

TEXT

O tipo de função que possui o objeto, ROLE ou DATABASE_ROLE. . Se um Snowflake Native App possuir o objeto, o valor será APPLICATION. . Snowflake retornará NULL se você excluir o objeto porque um objeto excluído não tem função de proprietário.

O tipo de dados OBJECT contém os seguintes campos:

Nome do campo

Descrição

sum

Soma de todas as execuções dentro do intervalo de agregação.

avg

Média de todas as execuções dentro do intervalo de agregação.

stddev

Desvio padrão em todas as execuções dentro do intervalo de agregação.

min

Mínimo em todas as execuções dentro do intervalo de agregação.

median

Média de todas as execuções dentro do intervalo de agregação.

p90

90º percentil em todas as execuções dentro do intervalo de agregação.

p99

99º percentil em todas as execuções dentro do intervalo de agregação.

p99.9

99,9º percentil em todas as execuções dentro do intervalo de agregação.

max

Máximo em todas as execuções dentro do intervalo de agregação.

Nota

As seguintes colunas do tipo OBJECT não contêm um campo sum:

  • PERCENTAGE_SCANNED_FROM_CACHE

  • QUERY_LOAD_PERCENT

  • QUERY_ACCELERATION_UPPER_LIMIT_SCALE_FACTOR

Coluna QUERY_PARAMETERIZED_HASH

A coluna QUERY_PARAMETERIZED_HASH contém um valor de hash que é calculado com base na consulta parametrizada, o que significa a versão da consulta após a parametrização de todos os literais.

Por exemplo, as consultas a seguir têm o mesmo valor QUERY_PARAMETERIZED_HASH:

SELECT * FROM table1 WHERE table1.name = 'TIM'
Copy
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
Copy

O valor QUERY_PARAMETERIZED_HASH tem as seguintes restrições:

  • O literal constante deve estar nas seguintes funções binárias em predicados: equal, not equal, greater (or equal) than, smaller (or equal) than.

  • Os aliases devem ser os mesmos.

Enquanto houver diferença no texto SQL, os valores QUERY_HASH e QUERY_PARAMETERIZED_HASH serão diferentes, com as seguintes exceções:

  • O identificador/variável de sessão/nome do estágio não diferencia maiúsculas de minúsculas.

  • As diferenças de espaço em branco são ignoradas.

  • Literais que satisfazem a regra do predicado binário mencionada acima.

Notas de uso

A latência da visualização pode ser de até 180 minutos (3 horas).

Exemplos

Você pode usar a exibição AGGREGATE_QUERY_HISTORY para monitorar possíveis problemas com erros, enfileiramento, bloqueio de bloqueio ou limitação de tabela híbrida. Normalmente, você deseja que essas métricas sejam consistentemente baixas. Se você observar um aumento em qualquer uma dessas métricas, isso pode indicar um problema:

SET (START_DATE, END_DATE) = ('2023-11-01', '2023-11-08');

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 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

Você pode consultar a exibição para monitorar a taxa de transferência e a simultaneidade geral da carga de trabalho. Muitas cargas de trabalho têm um padrão cíclico regular. Quaisquer picos ou quedas inesperados podem valer a pena investigar.

Por exemplo, monitore o rendimento e a simultaneidade do warehouse my_warehouse na primeira semana de novembro:

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 > '2023-11-01'
    AND interval_start_time < '2023-11-08'
GROUP BY
    interval_start_time
;
Copy

As consultas mais comuns e muito repetidas podem ser um bom lugar para concentrar quaisquer esforços para otimizar ou melhorar a eficiência da sua carga de trabalho. Você pode consultar a exibição para identificar as principais consultas de uma carga de trabalho por contagem de execução.

Por exemplo, identifique as principais consultas por contagem de execução para o warehouse my_warehouse:

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 > '2023-11-01'
    AND interval_start_time < '2023-11-08'
GROUP BY
    query_parameterized_hash
ORDER BY execution_count DESC
;
Copy

Para identificar as consultas mais lentas pela latência total média:

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 > '2023-07-01'
    AND interval_start_time < '2023-07-08'
GROUP BY
    query_parameterized_hash
ORDER BY avg_latency DESC
;
Copy

Para analisar o desempenho ao longo do tempo para uma consulta específica de interesse:

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 > '2023-07-01'
    AND interval_start_time < '2023-07-08'
ORDER BY interval_start_time DESC
;
Copy