> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-mintlify-fbfa8bee.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> Documentação sobre otimização guiada por perfil

# Otimização guiada por perfil

A Otimização Guiada por Perfil (PGO) é uma técnica de otimização de compilação em que um programa é otimizado com base no perfil de execução.

Nos testes, a PGO ajuda a melhorar o desempenho do ClickHouse. Segundo os testes, observamos melhorias de até 15% em QPS no conjunto de testes ClickBench. Os resultados mais detalhados estão disponíveis [aqui](https://pastebin.com/xbue3HMU). Os ganhos de desempenho dependem da sua carga de trabalho típica — você pode obter resultados melhores ou piores.

Mais informações sobre PGO no ClickHouse podem ser encontradas na [issue](https://github.com/ClickHouse/ClickHouse/issues/44567) correspondente no GitHub.

<div id="how-to-build-clickhouse-with-pgo">
  ## Como compilar o ClickHouse com PGO?
</div>

Há dois tipos principais de PGO: [Instrumentação](https://clang.llvm.org/docs/UsersManual.html#using-sampling-profilers) e [Amostragem](https://clang.llvm.org/docs/UsersManual.html#using-sampling-profilers) (também conhecida como AutoFDO). Este guia descreve o PGO por Instrumentação no ClickHouse.

1. Compile o ClickHouse no modo instrumentado. No Clang, isso pode ser feito passando a opção `-fprofile-generate` em `CXXFLAGS`.
2. Execute o ClickHouse instrumentado com uma carga de trabalho de exemplo. Aqui, você deve usar sua carga de trabalho habitual. Uma das abordagens possíveis é usar o [ClickBench](https://github.com/ClickHouse/ClickBench) como carga de trabalho de exemplo. O ClickHouse no modo de instrumentação pode ficar lento, então esteja preparado para isso e não execute o ClickHouse instrumentado em ambientes sensíveis a desempenho.
3. Recompile o ClickHouse mais uma vez com as flags de compilação `-fprofile-use` e os perfis coletados na etapa anterior.

Um guia mais detalhado sobre como aplicar PGO está na [documentação](https://clang.llvm.org/docs/UsersManual.html#profile-guided-optimization) do Clang.

Se você pretende coletar uma carga de trabalho de exemplo diretamente de um ambiente de produção, recomendamos usar PGO por Amostragem.
