作者: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) ,如下所示。
为了调整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参数。
服务器配置
ClickHouse服务器在C7g/C6i实例族上运行,实例大小不一。
基准测试客户端在单个C7g.4xlarge实例上运行。
下表总结了已测试的实例类型。
软件版本和测试参数如下:
注:“最大线程数”参数指定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之间的总查询处理时间比较(越低越好)。
表1.C7g与C6i上的ClickHouse查询处理时间基准结果
图1.C7g与C6i的查询时间性能增益
我们还选择了消耗更多处理时间的3个最重要的查询(查询19、查询33和查询34),以观察C7g实例与C6i实例相比的性能提升
下表显示了前3个复杂查询的结果,比较了C7g和C6i实例。(越低越好)
表2.查询19 C7g与C6i的结果
图2.查询19 C7g与C6i实例的性能提升
表3.查询33 C7g与C6i的结果
图3.查询33 C7g与C6i实例的性能提升
表4.查询34 C7g与C6i的结果
图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(越高越好)比较。
表5.C7g与C6i上的ClickHouse吞吐量性能结果(单连接)
图5.C7g与C6i实例的ClickHouse吞吐量性能增益(单连接)
下表显示了C7g和C6i上多连接场景(clickhouse benchmark--concurrency=N)的QPS比较。(注意:由于内存容量限制,xlarge/2xlarge/4xlarge实例无法支持多连接)
表6.C7g与C6i上的ClickHouse吞吐量性能结果(多连接)
图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.