基于 Profiling 的优化
基于 Profiling 的优化 (PGO) 是一种编译器优化技术,程序根据运行时的性能分析进行优化。
根据测试,PGO 有助于提高 ClickHouse 的性能。根据测试,ClickBench 测试套件显示 QPS 提升高达 15%。更详细的结果可以在 这里 查看。性能提升取决于您的典型工作负载 - 您可能会获得更好或更差的结果。
关于 ClickHouse 中 PGO 的更多信息,您可以在相应的 GitHub issue 中阅读。
如何构建带有 PGO 的 ClickHouse?
PGO 主要有两种类型:Instrumentation 和 Sampling(也称为 AutoFDO)。本指南描述了 ClickHouse 的 Instrumentation PGO。
- 在 Instrumented 模式下构建 ClickHouse。在 Clang 中,可以通过将
-fprofile-generate
选项传递给CXXFLAGS
来实现。 - 在样本工作负载上运行 Instrumented 的 ClickHouse。此处您需要使用您的常规工作负载。一种方法是使用 ClickBench 作为样本工作负载。Instrumented 模式下的 ClickHouse 可能会运行得比较慢,因此请做好准备,避免在性能关键的环境中运行 Instrumented 的 ClickHouse。
- 使用从上一步骤收集的配置文件和
-fprofile-use
编译器标志再次重新编译 ClickHouse。
有关如何应用 PGO 的更详细指南,请查看 Clang 文档。
如果您打算直接从生产环境收集样本工作负载,我们建议尝试使用 Sampling PGO。