ClickHouse 性能测试

图片

本文字数:5263;估计阅读时间:14 分钟

作者:Alexander Kuzmenkov

审校:庄晓东(魏庄)

本文在公众号【ClickHouseInc】首发

图片

ClickHouse 的一大优势在于其速度非常快,在很多情况下可以将硬件性能发挥到理论极限。许多独立的基准测试,如这个测试,都证实了这一点。其速度源于正确的架构选择和算法优化,并进行了一些独特的优化。在我们的网站上可以找到这些因素的概述,或者可以观看 ClickHouse 首席开发者 Alexey Milovidov 的演讲《ClickHouse 性能优化的秘密》。但这只是一个静态的“现状”。软件是一个不断变化的有机体,而 ClickHouse 的变化速度非常快——为了解释这一规模,仅在 2021 年 7 月,我们就合并了由 60 位不同作者提交的 319 个拉取请求(实时统计数据在这里)。如果没有积极维护,性能等任何特性都会在持续变化中丧失。因此,我们必须有一些流程来确保 ClickHouse 始终保持快速。

测量和比较性能

首先,我们如何知道它是否快速?我们进行了大量的基准测试,涵盖了各种类型。最基本的基准测试是一种微基准测试,这种测试不使用完整的服务器代码,而是单独测试特定的算法。我们用它们来选择某些聚合函数的最佳内部循环,或测试各种哈希表布局等。例如,当我们发现一个竞争数据库引擎使用 sum 聚合函数完成查询的速度是我们的两倍时,我们测试了几十种 sum 的实现,最终找到了性能最佳的(参见关于此的演讲,俄语)。但仅仅测试一个特定的算法并不足以说明整个查询的工作情况。我们还必须对整个查询进行端到端的测量,通常使用真实的生产数据,因为数据的特性(如值的基数和分布)对性能有很大影响。目前,我们大约有 3000 个端到端的测试查询,组织成大约 200 个测试。许多测试使用真实的数据集,例如 Yandex.Metrica 的生产数据,通过 clickhouse-obfuscator 进行混淆,如此处所述。

微基准测试通常由开发人员在编写代码时运行,但手动运行整个端到端测试套件来检查每次更改是不实际的。我们使用一个自动化系统作为持续集成检查的一部分,为每个拉取请求执行此操作。该系统测量拉取请求的代码更改是否影响性能、影响了哪些查询类型以及影响程度,如果出现性能回归,会提醒开发人员。以下是典型报告的样子。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值