麦斯科技 · 2022年08月10日 · 四川

使用AWS Graviton3将ClickHouse性能提高26%

https://community.arm.com/arm-community-blogs/b/infrastructure-solutions-blog/posts/improve-clickhouse-performance-up-to-26-by-using-aws-graviton3

作者:Martin Ma,Zaiping Bie 2022年7月12日

介绍

ClickHouse是一个面向列的数据库管理系统(DBMS),用于在线查询分析处理(OLAP)。它支持业界最佳的查询性能,同时通过创新地使用列式存储和压缩显著降低了存储需求。在过去的几年中,它在OLAP领域非常流行,并被许多企业广泛使用。

在本博客中,我们比较了不同大小的两个Amazon EC2实例系列上ClickHouse的查询延迟(处理时间)和吞吐量。这些实例系列是Amazon EC2 C7g(基于Arm Neoverse的AWS Graviton3处理器)和C6i(基于第三代Intel Xeon可扩展处理器)。我们发现,与C6i实例相比,在C7g实例上部署ClickHouse可以实现高达26%的性能优势。以下部分介绍了我们的测试方法和结果的细节。

性能基准设置和结果

对于基准测试设置,ClickHouse服务器和客户端部署在不同的实例中。我们将ClickHouse客户端连接到ClickHouse服务器,并重复发送预设查询。然后,我们收集查询处理时间和吞吐量,以比较C7g和C6i实例之间的性能。

构建配置

为了获得最佳性能,除了按照官方程序(https://clickhouse.com/docs/en/development/build/)使用最新的Clang构建ClickHouse外,我们还应用了CMake原生和AVX相关flags(https://clickhouse.com/docs/en/development/cmake-in-clickhouse) ,如下所示。

屏幕截图 2022-08-09 233811.png

为了调整C7g和C6i上的jemalloc行为,在jemalloc_internal_defs.h.in.(https://github.com/ClickHouse/ClickHouse/blob/master/contrib/jemalloc-cmake/include_linux_aarch64/jemalloc/internal/jemalloc_internal_defs.h.in)中配置了以下Jemallc参数。

屏幕截图 2022-08-09 233843.png

服务器配置

ClickHouse服务器在C7g/C6i实例族上运行,实例大小不一。
基准测试客户端在单个C7g.4xlarge实例上运行。
下表总结了已测试的实例类型。

屏幕截图 2022-08-09 234041.png

软件版本和测试参数如下:

屏幕截图 2022-08-09 234256.png

屏幕截图 2022-08-09 234340.png

注:“最大线程数”参数指定ClickHouse server上并行查询处理的工作线程数;默认值是物理CPU核的数量。使用此默认“最大线程数”设置时,C7g实例的性能比C6i实例高40%。但在C6i实例中,多达一半的CPU资源处于空闲状态,而C7g实例则得到充分利用。为了充分利用C6i上的CPU资源,我们将“最大线程”值设置为C7g和C6i实例上的vCPU数。

查询时间测试

我们使用web analytics数据集(https://clickhouse.com/docs/en/getting-started/example-datasets/metrica)(包含1亿行的“命中”表)和43个典型查询来收集查询处理时间,这是由官方基准方法提供的。

对于这43个典型查询中的每一个,平均查询时间是一个预热查询后10个连续查询的算术平均值。如下表所示,总查询时间是这43个查询的平均时间之和。我们观察到,在C7g实例上运行ClickHouse与在C6i实例上运行相比,性能提升了25.8%。

下表显示了C7g和C6i之间的总查询处理时间比较(越低越好)。

屏幕截图 2022-08-09 234537.png

表1.C7g与C6i上的ClickHouse查询处理时间基准结果

ClickHouse-Fig-1.jpg

图1.C7g与C6i的查询时间性能增益

我们还选择了消耗更多处理时间的3个最重要的查询(查询19、查询33和查询34),以观察C7g实例与C6i实例相比的性能提升

屏幕截图 2022-08-09 235131.png

下表显示了前3个复杂查询的结果,比较了C7g和C6i实例。(越低越好)

屏幕截图 2022-08-09 235200.png

表2.查询19 C7g与C6i的结果

ClickHouse Fig 2.jpg-1265x0.jpg

图2.查询19 C7g与C6i实例的性能提升

屏幕截图 2022-08-09 235506.png

表3.查询33 C7g与C6i的结果

ClickHouse Fig 3.jpg-1265x0.jpg

图3.查询33 C7g与C6i实例的性能提升

屏幕截图 2022-08-09 235757.png
表4.查询34 C7g与C6i的结果

ClickHouse-Fig-4.jpg

图4.查询34 C7g与C6i实例的性能提升

吞吐量测试

我们使用官方的ClickHouse基准工具(https://clickhouse.com/docs/en/operations/utilities/clickhouse-benchmark/)收集基于相同数据集和查询的吞吐量数据。在预热阶段之后,每个测试将使用基准测试工具将所有43个典型查询连续发送到服务器,并在测试结束时报告每秒查询数(QPS)。我们观察到,在C7g实例上运行ClickHouse与在C6i实例上运行相比,性能提升了31.6%。

下表显示了C7g和C6i上默认单连接场景(clickhouse benchmark--concurrency=1)的QPS(越高越好)比较。

屏幕截图 2022-08-10 000132.png

表5.C7g与C6i上的ClickHouse吞吐量性能结果(单连接)

ClickHouse-Fig5.jpg

图5.C7g与C6i实例的ClickHouse吞吐量性能增益(单连接)

下表显示了C7g和C6i上多连接场景(clickhouse benchmark--concurrency=N)的QPS比较。(注意:由于内存容量限制,xlarge/2xlarge/4xlarge实例无法支持多连接)

屏幕截图 2022-08-10 000337.png

表6.C7g与C6i上的ClickHouse吞吐量性能结果(多连接)

ClickHouse-Fig-6.jpg

图6.C7g与C6i实例的ClickHouse吞吐量性能增益(多连接)

结论

除了节省20%的实例价格外,通过部署在基于AWS Graviton3的C7g实例上,ClickHouse还将查询延迟(处理时间)降低了26%,吞吐量性能提高了32%。这种比较是在配置相同的第三代Xeon Scalable处理器实例上进行的。

访问AWS Graviton3页面(https://aws.amazon.com/ec2/instance-types/c7g/),了解采用基于Arm处理器的客户案例。有关如何将现有应用程序迁移到AWS Graviton的详细信息,请查看此GitHub页面(https://github.com/aws/aws-graviton-getting-started)。如果您对运行在Arm Neoverse平台上的软件工作负载有任何疑问,请随时联系我们sw-ecosystem@arm.com.

推荐阅读
关注数
5842
内容数
525
定期发布Arm相关软件信息,微信公众号 ArmSWDevs,欢迎关注~
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息