- Esquema:
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 |
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 |
ERRORS |
ARRAY |
Lista de códigos de erro e mensagens que ocorreram durante o intervalo de agregação. Cada erro está no formato |
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, |
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, |
O tipo de dados OBJECT contém os seguintes campos:
Nome do campo |
Descrição |
---|---|
Soma de todas as execuções dentro do intervalo de agregação. |
|
Média de todas as execuções dentro do intervalo de agregação. |
|
Desvio padrão em todas as execuções dentro do intervalo de agregação. |
|
Mínimo em todas as execuções dentro do intervalo de agregação. |
|
Média de todas as execuções dentro do intervalo de agregação. |
|
90º percentil em todas as execuções dentro do intervalo de agregação. |
|
99º percentil em todas as execuções dentro do intervalo de agregação. |
|
99,9º percentil em todas as execuções dentro do intervalo de agregação. |
|
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'
SELECT * FROM table1 WHERE table1.name = 'AIHUA'
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 ;
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
;
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
;
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
;
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
;