- ClickHouse Cloud
- Autogerenciado
No ClickHouse Cloud, você pode obter o ID da consulta clicando em ”…” na extremidade direita da barra acima da tabela de resultados da consulta (ao lado do botão de alternância entre tabela/gráfico). Isso abre um menu de contexto no qual você pode clicar em “Copiar ID da consulta”.Use
clusterAllReplicas(default, system.trace_log) para selecionar dados de todos os nós do cluster:Usando o profiler de consultas em implantações autogerenciadas
1
Instale o ClickHouse com informações de depuração
Instale o pacoteclickhouse-common-static-dbg:- Siga as instruções na etapa “Configurar o repositório Debian”
- Execute
sudo apt-get install clickhouse-server clickhouse-client clickhouse-common-static-dbgpara instalar os arquivos binários compilados do ClickHouse com informações de depuração - Execute
sudo service clickhouse-server startpara iniciar o servidor - Execute
clickhouse-client. Os símbolos de depuração declickhouse-common-static-dbgserão carregados automaticamente pelo servidor — você não precisa fazer nada de especial para habilitá-los
2
Verifique a configuração do servidor
Certifique-se de que a seçãotrace_log do seu arquivo de configuração do servidor esteja configurada. Ela vem habilitada por padrão:3
Configure os temporizadores do profiler
Configure as definiçõesquery_profiler_cpu_time_period_ns ou query_profiler_real_time_period_ns.
Ambas as configurações podem ser usadas simultaneamente.Essas configurações permitem ajustar os temporizadores do profiler.
Como são configurações de sessão, você pode usar frequências de amostragem diferentes para o servidor inteiro, usuários individuais ou perfis de usuário, para sua sessão interativa e para cada consulta individual.A frequência de amostragem padrão é de uma amostra por segundo, e tanto os temporizadores de CPU quanto os de tempo real ficam habilitados.
Essa frequência permite coletar informações suficientes sobre seu cluster ClickHouse sem afetar o desempenho do servidor.
Se você precisar perfilar cada consulta individualmente, use uma frequência de amostragem mais alta.4
Analise a tabela de sistema trace_log
Para analisar a tabela de sistema trace_log, habilite as funções de introspecção com a configuração allow_introspection_functions:Por motivos de segurança, as funções de introspecção vêm desabilitadas por padrão
addressToLine, addressToLineWithInlines, addressToSymbol e demangle funções de introspecção para obter nomes de funções e suas posições no código do ClickHouse.
Para obter um perfil de alguma consulta, você precisa agregar dados da tabela trace_log.
Você pode agregar os dados por função individual ou pelos stack traces completos.Criando flame graphs com a função flameGraph
flameGraph, que cria um flame graph diretamente a partir de stack traces armazenados em trace_log.
A saída é um array de strings em formato compatível com flamegraph.pl.
Sintaxe:
traces— um stack trace.Array(UInt64).size— o tamanho de uma alocação para profiling de memória.Int64.ptr— um endereço de alocação.UInt64.
ptr é diferente de zero, flameGraph associa alocações (size > 0) e desalocações (size < 0) com o mesmo tamanho e ponteiro.
Somente as alocações que não foram liberadas são mostradas.
Desalocações sem correspondência são ignoradas.
Flame graph da CPU
As consultas abaixo exigem que você tenha o flamegraph.pl instalado.Para isso, execute:Substitua
flamegraph.pl nas consultas a seguir pelo caminho em que flamegraph.pl está localizado na sua máquinaFlame graph de memória — todas as alocações
Flame graph de memória — alocações não liberadas
Flame graph de memória — alocações ativas em um determinado momento
Encontre o uso de memória ao longo do tempo
Encontre o instante com o maior uso de memória
Crie um flame graph das alocações ativas naquele momento
Crie um flame graph de desalocações após esse momento (para entender o que foi liberado posteriormente)
Exemplo
- Filtra os dados de
trace_logpor um identificador de consulta e pela data atual. - Agrupa por stack trace.
- Usa funções de introspecção para gerar um relatório com:
- Os nomes dos símbolos e as funções correspondentes no código-fonte.
- As localizações dessas funções no código-fonte.