Search CTRL + K

ClickHouse 性能评测

ClickHouse 性能可以通过 I 层、P 层评测间接、直接评估,汇总如下:

IaaS 层评测

IaaS 层评测方式一般是:

评测标准为:

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 大宽表场景设计的,需要额外的准备工作:

  1. 生成数据,建议指定 -s 1000,大约生成 1TB 数据
  2. 导入数据
  3. join 各子表生成大宽表
  4. 针对大宽表进行 benchmark

其次建议官方的 ClickBench


  1. https://clickhouse.com/docs/en/operations/settings/settings/#min-compress-block-size ↩︎

  2. https://clickhouse.com/docs/en/operations/settings/settings/#preferred-block-size-bytes ↩︎

  3. https://clickhouse.com/docs/en/operations/settings/settings/#max-compress-block-size ↩︎

  4. https://clickhouse.com/docs/en/sql-reference/table-functions/cluster/ ↩︎

  5. https://clickhouse.com/docs/en/operations/caches ↩︎