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