基于性能分析的优化
Profile-Guided Optimization(PGO,基于性能分析的优化)是一种编译器优化技术,它根据程序的运行时性能分析数据对程序进行优化。
根据测试结果,PGO 有助于提升 ClickHouse 的性能。在 ClickBench 测试套件中,我们观测到 QPS 最高可提升约 15%。更详细的结果可在这里查看。性能收益取决于典型工作负载,实际结果可能更好或更差。
关于 ClickHouse 中 PGO 的更多信息,可在对应的 GitHub issue 中查阅。
如何使用 PGO 构建 ClickHouse?
PGO 主要有两种类型:Instrumentation 和 Sampling(也称为 AutoFDO)。本指南介绍的是在 ClickHouse 中使用 Instrumentation PGO 的方法。
- 以 Instrumentation 模式构建 ClickHouse。在 Clang 中,可以通过在
CXXFLAGS中加入-fprofile-generate选项来实现。 - 在样本工作负载上运行插桩版 ClickHouse。这里应使用您常规的工作负载,其中一种做法是使用 ClickBench 作为样本工作负载。处于 Instrumentation 模式下的 ClickHouse 可能运行较慢,请提前做好预期,并避免在对性能敏感的环境中运行插桩版 ClickHouse。
- 使用
-fprofile-use编译器选项以及在上一步中收集到的 profile,再次编译 ClickHouse。
关于如何应用 PGO 的更详细说明,请参阅 Clang 的文档。
如果您计划直接在生产环境中收集样本工作负载,我们建议尝试使用 Sampling PGO。