ClickHouse 性能评测
ClickHouse 性能可以通过 I 层、P 层评测间接、直接评估,汇总如下:
IaaS 层评测
IaaS 层评测方式一般是:
- 和历史产品对比
- 和竞品对比
- 和相似产品对比
评测标准为:
- 所有指标都要达标(允许一定范围内误差)
- 但是不达标只能说明有风险,要结合 PaaS 层压测看是否会成为瓶颈
CPU
根据 ClickHouse 使用场景,采取不同评测方式。
所需能力 | 方法 | 预计耗时 |
---|---|---|
数值计算 | speccpu | < 11 小时 |
join | hash | 1 小时 |
字符串匹配 | 主频 | - |
SIMD | linkpack | 30 分钟 |
压缩、解压缩 | compress/decompress | 10 分钟 |
磁盘
ClickHouse 写入、读取的最小单位为块(block),最小的块默认为 64KB[1],写入最大的块为 1MB[2],读取通常为 1MB[3]。
鉴于 ClickHouse 采用 LSM 树 组织磁盘文件,写入可以认为都是顺序、大块,所以只测试 128KB 顺序写入;由于存在主键索引、跳表索引,因此顺序、随机读都会存在,且小块、大块都会有。
所需能力 | 方法 | 预计耗时 |
---|---|---|
顺序写(128KB)带宽 | fio | - |
写 IOPS | fio | - |
随机(4KB)、顺序读(4KB、128KB)带宽 | fio | - |
读 IOPS | fio | - |
总共预计耗时 8 小时。
网络
对于多 shard、多 replicas 的集群部署 ClickHouse 而言,网络也是重要指标。ClickHouse 节点之间的 分布式表 一直持有长连接 [4],而客户端到 ClickHouse 节点一般而言是短连接。
所需能力 | 方法 | 预计耗时 |
---|---|---|
内网带宽(短连接、长连接) | netperf | 2 小时 |
PPS(短连接、长连接) | netperf | 1 小时 |
延迟 | ping | 1 小时 |
丢包 | iperf3 | 30 分钟 |
PaaS 层评测
ClickHouse 作为 OLAP数据库 自然有对应的指标和要求,ClickHouse 本身的评测一般通过特导入定数据集后跑 benchmark 并收集性能数据来比较。评测指标可以参考 文档。注意,ClickHouse 本身存在缓存 [5],查询一定要注意关闭/清空缓存以直接反映系统最差情况。
指标 | 方法 | 单位 |
---|---|---|
数据插入速率 | system.query_log 表 |
MB/秒 |
请求耗时 | system.query_log 表 |
ms |
磁盘吞吐量(大查询) | system.query_log 表 |
行/秒,MB/秒 |
磁盘读取延迟(小查询) | system.query_log 表 |
ms |
请求吞吐量(大量小查询) | CPU、内存和磁盘未饱和情况下最大 QPS;或者能处理 100QPS 即可 | QPS |
系统负载 | system.metrics /system.metrics_log /system.asynchronous_metrics |
- |
首推数据集 SSB,但是它并不是针对 ClickHouse 大宽表场景设计的,需要额外的准备工作:
- 生成数据,建议指定
-s 1000
,大约生成 1TB 数据 - 导入数据
- join 各子表生成大宽表
- 针对大宽表进行 benchmark
其次建议官方的 ClickBench。
https://clickhouse.com/docs/en/operations/settings/settings/#min-compress-block-size ↩︎
https://clickhouse.com/docs/en/operations/settings/settings/#preferred-block-size-bytes ↩︎
https://clickhouse.com/docs/en/operations/settings/settings/#max-compress-block-size ↩︎
https://clickhouse.com/docs/en/sql-reference/table-functions/cluster/ ↩︎