Оптимизация, управляемая профилированием
Profile-Guided Optimization (PGO) — это техника оптимизации компилятора, при которой программа оптимизируется на основе профиля выполнения во время работы.
Согласно тестам, PGO помогает достичь более высокой производительности в ClickHouse. Мы наблюдаем улучшение до 15% по показателю QPS в тестовом наборе ClickBench. Более подробные результаты доступны здесь. Прирост производительности зависит от вашей типичной нагрузки — вы можете получить как лучшие, так и худшие результаты.
Подробнее о PGO в ClickHouse можно прочитать в соответствующем issue на GitHub.
Как собрать ClickHouse с PGO?
Существует два основных вида PGO: Instrumentation и Sampling (также известный как AutoFDO). В этом руководстве описывается использование Instrumentation PGO с ClickHouse.
- Соберите ClickHouse в инструментированном режиме. В Clang это можно сделать, передав опцию
-fprofile-generateвCXXFLAGS. - Запустите инструментированный ClickHouse на образцовой нагрузке. Здесь следует воспроизвести вашу обычную рабочую нагрузку. Один из подходов — использовать ClickBench в качестве примерной нагрузки. ClickHouse в режиме инструментирования может работать медленно, поэтому будьте к этому готовы и не запускайте инструментированный ClickHouse в производственных средах, критичных к производительности.
- Пересоберите ClickHouse ещё раз с флагами компилятора
-fprofile-useи профилями, которые были собраны на предыдущем шаге.
Более подробное руководство по применению PGO приведено в документации Clang.
Если вы собираетесь собирать образцовую нагрузку непосредственно в продукционной среде, мы рекомендуем попробовать использовать Sampling PGO.