system.query_log para identificar padrões recorrentes de consultas lentas, escolher uma execução representativa e analisar seu uso de recursos. Em seguida, você usará EXPLAIN para inspecionar o plano de execução da consulta e formular uma hipótese sobre o gargalo antes de alterar a consulta ou o esquema.
Antes de começar
nyc_taxi.trips_small_inferred. Para executá-los conforme descrito, crie e carregue a tabela, caso ainda não tenha feito isso:
Configurar o conjunto de dados de exemplo
Configurar o conjunto de dados de exemplo
O arquivo Parquet de origem tem aproximadamente 5,8 GB. O carregamento pode levar vários minutos, dependendo da sua rede e dos recursos disponíveis.
SYSTEM FLUSH LOGS, aguarde o descarregamento automático do log de consultas e tente novamente a primeira busca. Ao diagnosticar sua própria carga de trabalho, verifique se system.query_log contém execuções concluídas no intervalo de tempo que você pretende inspecionar.
Como funciona
system.query_log. Cada registro pode incluir a duração da consulta, o número de linhas lidas, o uso de CPU e memória e a atividade do cache do sistema de arquivos.
Essas medições ajudam a identificar padrões de consultas lentas e a entender como elas consomem recursos. Após escolher uma execução representativa, você pode inspecionar seu plano de execução da consulta para investigar em que parte a consulta pode estar levando mais tempo.
Em um cluster, os dados do log de consultas permanecem locais em cada nó. Os exemplos deste guia usam clusterAllReplicas para consultar todas as réplicas e merge para incluir a tabela system.query_log atual e quaisquer tabelas query_log_N versionadas mantidas após alterações no esquema das tabelas do sistema.
Cada exemplo de log de consultas inclui abas para implantações em cluster e de nó único. O ClickHouse Cloud fornece o cluster default usado nos exemplos de cluster. Em uma implantação autogerenciada, substitua default por um cluster listado em system.clusters.
Os exemplos definem
skip_unavailable_shards para que uma réplica temporariamente indisponível não faça a consulta de diagnóstico falhar. Isso é especialmente útil durante o escalonamento automático. Os registros de uma réplica ignorada não são incluídos, portanto, os resultados podem estar incompletos.Diagnostique uma consulta lenta
Identifique consultas candidatas
Comece agrupando as consultas iniciais concluídas por Use O campo
normalized_query_hash. Isso separa os padrões de consulta recorrentes das execuções lentas isoladas. A consulta a seguir classifica os padrões pela duração mediana e inclui uma consulta de exemplo para cada padrão:- Cluster
- Nó único
executions para distinguir um workload recorrente de queries isoladas. Um pattern com duration mediana alta, execuções frequentes ou uso elevado de resource é um candidate mais forte para investigation do que uma única execução lenta.Como um levantamento rápido, a consulta a seguir lista a execução concluída mais lenta para até cinco query patterns distintos no NYC Taxi dataset. Ela exclui as instruções de carregamento do dataset e execuções repetidas do mesmo pattern. Na próxima etapa, você vai restringir o query history às execuções com o normalized_query_hash selecionado acima.- Cluster
- Nó único
query_duration_ms contém a duração da consulta em milissegundos. Nesses resultados, a consulta mais demorada levou 2.967 ms.Você também pode identificar consultas candidatas com base no uso de recursos, em vez da duração da consulta:Identifique consultas que consomem muitos recursos
Identifique consultas que consomem muitos recursos
Esta consulta classifica as consultas recentes pelo uso de memória e inclui o uso de CPU de cada uma. Os resultados variam conforme a carga de trabalho e a implantação:
- Cluster
- Nó único
Escolha uma execução representativa da consulta
Uma única execução lenta pode ser um valor atípico causado por uma consulta ad hoc ou por uma carga temporária no sistema. Antes de inspecionar o plano de consulta, analise várias execuções concluídas com o mesmo Os resultados de exemplo do log de consultas mostram que cada candidato leu aproximadamente 329,04 milhões de linhas. Para referência, confirme o número de linhas na tabela de exemplo:A tabela contém 329,04 milhões de linhas, aproximadamente o mesmo número informado em
normalized_query_hash, que é idêntico para consultas que diferem apenas nos valores literais. Escolha uma execução que represente a duração e o uso de recursos típicos do padrão.Substitua o valor atribuído a selected_hash pelo normalized_query_hash do padrão que deseja investigar:- Cluster
- Nó único
- Encontre execuções com valores semelhantes de
read_rowseread_bytes. - Compare
query_duration_msememory_usagedessas execuções. - Selecione o
query_idcujoquery_duration_msesteja mais próximo da mediana.
Os resultados históricos do log de consultas podem variar conforme o estado do cache e a carga do sistema. Portanto, use-os para escolher uma consulta a ser investigada, não para comparar alterações de otimização. Se o log de consultas não contiver execuções concluídas suficientes, execute a consulta algumas vezes em condições semelhantes. O próximo guia, Isolar gargalos de consulta, explica como coletar medições controladas para comparar alterações.
read_rows para cada candidato. Isso sugere que as consultas examinaram a maior parte ou toda a tabela, mas não explica por que essas linhas foram lidas nem se essa quantidade é adequada para a consulta. Em seguida, inspecione o plano de execução da consulta para ver como o ClickHouse selecionou e processou os dados.Inspecione o Plano de Execução
Após escolher uma execução representativa, use A saída inclui as seguintes operações. Detalhes como o número de partes e grânulos dependem de como os dados são armazenados:De baixo para cima, o plano corresponde à consulta da seguinte forma:
EXPLAIN para verificar como o ClickHouse planeja a consulta sem executá-la. A saída mostra as operações que o ClickHouse espera realizar e como os dados se movem entre elas, fornecendo mais contexto para as medições no log de consultas.Para uma introdução detalhada aos formatos de saída disponíveis, consulte Entenda a execução de consultas com o analyzer. Neste exemplo, EXPLAIN mostra como o ClickHouse planeja ler e filtrar os dados e se pode ignorar parte deles.A saída é uma árvore de operações que mostra como o ClickHouse espera ler, filtrar e processar os dados. As operações filhas aparecem abaixo das operações pai. Comece pela operação de leitura mais profunda e, em seguida, siga o plano de baixo para cima para ver como o ClickHouse transforma os dados no resultado final.Neste exemplo, inspecione a consulta de velocidade calculada nos resultados do log de consultas:ReadFromMergeTreelê dados denyc_taxi.trips_small_inferred. A ausência da seçãoIndexes, junto comread_rowscorrespondendo ao número de linhas da tabela, mostra que o ClickHouse lê a tabela inteira.Filtermostra a expressão expandida paraspeed_mph > 30. Para cada linha lida, o ClickHouse calcula a duração e a velocidade da corrida e mantém apenas as linhas com velocidade acima de 30 milhas por hora.Aggregatingcalcula os quantis com base nos valores filtrados detrip_distance.
speed_mph durante a filtragem e calcular os quantis.