zoukankan      html  css  js  c++  java
  • 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

    微信公众号:测试生财(定期分享独家内容和资源)

  • 相关阅读:
    图片轮显效果大全
    firefox 对WebRTC支持
    Android AES加密算法及事实上现
    怎样以学习单片机为契机,逐步成为优秀的project师
    HTML中Select的使用具体解释
    POJ 3602 Typographical Ligatures
    远程控制编写之屏幕传输 MFC实现 屏幕截图 发送bmp数据 显示bmp图像
    blend
    POJ3187 Backward Digit Sums
    牛腩公布系统--HTTP 错误 403.14
  • 原文地址:https://www.cnblogs.com/qa-freeroad/p/14394135.html
Copyright © 2011-2022 走看看