ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Clickhouse集群性能测试(全网独家精华版)

2021-02-16 13:01:31  阅读:275  来源: 互联网

标签:-- 全网 value thing Clickhouse 精华版 device id clickhouse


背景

公司使用clickhouse作为其时序分析数据库,在上线前需要对Clickhouse集群做一个性能基准测试,用于数据评估。这里我搭建了三节点的集群,集群采用三分片单副本的模式(即数据分别存储在三个Clickhouse节点上,每个Clickhouse节点都有一个单独的副本,如下图:


具体的搭建方式参考:Clickhouse集群搭建

性能测试说明

性能关注指标

  • clickhouse-server写性能
  • clickhouse-server读性能
  • clickhouse-server的CPU和内存占用情况

测试环境说明

1)虚拟机列表

机器名

IP

配置

部署的服务

备注

server01

192.168.21.21

8c8g

clickhouserver(cs01-01)和

clickhouserver(cs01-02)

clickhouse01-01: 实例1, 端口: tcp 9000, http 8123, 同步端口9009, 类型: 分片1, 副本1

clickhouse01-02: 实例2, 端口: tcp 9001, http 8124, 同步端口9010, 类型: 分片2, 副本2 (clickhouse2的副本)

server02

192.168.21.69

8c8g

clickhouserver(cs02-01)和

clickhouserver(cs02-02)

clickhouse02-01: 实例1, 端口: tcp 9000, http 8123, 同步端口9009, 类型: 分片2, 副本1

clickhouse02-02: 实例2, 端口: tcp 9001, http 8124, 同步端口9010, 类型: 分片3, 副本2 (clickhouse3的副本)

server03

192.168.21.6

8c8g

clickhouserver(cs03-01)和

clickhouserver(cs03-02)

clickhouse03-01: 实例1, 端口: tcp 9000, http 8123, 同步端口9009, 类型: 分片3, 副本1

clickhouse03-02: 实例2, 端口: tcp 9001, http 8124, 同步端口9010, 类型: 分片1, 副本2 (clickhouse1的副本)

发压机器

192.168.21.3

16c2g

压测机器

用于测试clickhouse-server的性能

2)测试数据表说明

server02上的cs02-01中数据表使用如下sql创建写测试表:

create database test_ck;

#创建本地复制表用于写入(使用ReplicatedMergeTree复制表)
CREATE TABLE test_ck.device_thing_data (
                time                     UInt64,
                user_id                 String,
                device_id                 String,
                source_id                 String,
                thing_id                   String,
                identifier                String,
                value_int32                Int32,
                value_float                Float32,
                value_double            Float64,
                value_string            String,
                value_enum              Enum8('0'=0,'1'=1,'2'=2,'3'=3,'4'=4,'5'=5,'6'=6,'7'=7,'8'=8),
                value_string_ex         String,
                value_array_string         Array(String),
                value_array_int32         Array(Int32),
                value_array_float         Array(Float32),
                value_array_double         Array(Float64),
                action_date                Date,
                action_time             DateTime
            ) Engine= ReplicatedMergeTree('/clickhouse/tables/01-02/device_thing_data','cluster01-02-1') PARTITION BY toYYYYMM(action_date) ORDER BY (user_id,device_id,thing_id,identifier,time,intHash64(time)) SAMPLE BY intHash64(time) SETTINGS index_granularity=8192

创建分布式表用于查询,在三台每个机器上均执行如下sql:

CREATE TABLE device_thing_data_all AS test_ck.device_thing_data ENGINE = Distributed(cluster_3s_1r, test_ck, device_thing_data, rand())

测试数据说明

1)测试原始数据从开发联调环境的clickhouse导出,保存到本地的csv文件

2)写数据测试往192.168.21.69的9000端口(cs02-01)的test_ck.device_thing_data写入,使用的sql类似如下:

self.client.execute('INSERT INTO test_ck.device_thing_data (time,user_id,device_id,source_id,thing_id,identifier,value_int32,value_float,value_double,value_string,value_enum,value_string_ex,value_array_string,value_array_int32,value_array_float,value_array_double,action_date,action_time) VALUES', data,types_check=True)

3)读数据测试和写数据clickhouse-server实例一致,表使用device_thing_data_all,使用的sql类似如下:

self.client.execute('select count(1) from (select time,user_id,device_id,source_id,thing_id,identifier,value_int32,value_float,value_double,value_string,value_enum,value_string_ex,value_array_string,value_array_int32,value_array_float,value_array_double,action_date,action_time from device_thing_data_all limit %d) t1' % self.bulksize)

测试工具

测试工具使用python和shell编写,python使用clickhouse的客户端,shell使用parallel实现多进程

测试场景与性能数据

 1)写入测试,对集群的(cs02-01)的复制表的写入测试

每次批量数据条数

客户端连接数

耗时(秒)

插入总行数

TPS(records/sec)

clickhouse的CPU占用

clickhouse内存占用(m)

备注

10

1

12.319155

10000

811.744020

43%

1.8%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=1 --clientnum=1 --bulksize=10 --times=1000

100

3

25.015171

300000

12026.095374

72%

1.8%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=1 --clientnum=3 --bulksize=100 --times=1000

1000

3

61.579590

1500000

24496.428544

18.3%

1.9%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=1 --clientnum=3 --bulksize=1000 --times=500

1000

6

64.323068

3000000

47051.112386

35.2%

1.9%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=1 --clientnum=6 --bulksize=1000 --times=500

10000

6

222.632641

12000000

54542.892502

9.3%

2.4%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=1 --clientnum=6 --bulksize=1000 --times=500

2)读取测试,对集群的(cs02-01)的分布式表的读取测试

每次批量数据条数

客户端连接数

耗时(秒)

插入总行数

TPS(records/sec)

clickhouse的CPU占用

clickhouse内存占用(m)

备注

1000

1

11.610356

1000000

86130.004332

69.4%

2.1%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=0 --clientnum=1 --bulksize=1000 --times=1000

1000

3

12.897658

3000000

233129.085885

200.1%

2.1%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=0 --clientnum=3 --bulksize=1000 --times=1000

10000

3

12.971161

30000000

2322824.513353

207%

2.1%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=0 --clientnum=3 --bulksize=10000 --times=1000

10000

6

16.298867

60000000

3705072.680627

353.5%

2.1%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=0 --clientnum=6 --bulksize=10000 --times=1000

100000

6

19.740923

600000000

30605253.774755

461%

2.2%(约160M)

/bin/bash start_clickhouse_perf.sh --mode=0 --clientnum=6 --bulksize=100000 --times=1000

3)写入数据量测试

写入1亿条记录到clickhouse单实例中,最后硬盘上的数据大小约为450M左右。

最后

可以看出,Clickhouse的单批次读写的记录越多,性能越好;尽量使用多线程进行读写,这样能够最大化利用Clickhouse的性能。


博主:测试生财(一个不为996而996的测开码农)

座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。

内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。

csdn:https://blog.csdn.net/ccgshigao

博客园:https://www.cnblogs.com/qa-freeroad/

51cto:https://blog.51cto.com/14900374

在码农的苦闷岁月里,期待我们一起成长,欢迎关注,感谢拍砖!


标签:--,全网,value,thing,Clickhouse,精华版,device,id,clickhouse
来源: https://blog.51cto.com/14900374/2629466

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有