Clickhouse集羣性能測試(全網獨家精華版)

背景

公司使用clickhouse做爲其時序分析數據庫,在上線前須要對Clickhouse集羣作一個性能基準測試,用於數據評估。這裏我搭建了三節點的集羣,集羣採用三分片單副本的模式(即數據分別存儲在三個Clickhouse節點上,每一個Clickhouse節點都有一個單獨的副本,以下圖:html


具體的搭建方式參考:Clickhouse集羣搭建python

性能測試說明

性能關注指標

  • clickhouse-server寫性能
  • clickhouse-server讀性能
  • clickhouse-server的CPU和內存佔用狀況

測試環境說明

1)虛擬機列表sql

機器名shell

IP數據庫

配置bash

部署的服務多線程

備註運維

server01tcp

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

在碼農的苦悶歲月裏,期待咱們一塊兒成長,歡迎關注,感謝拍磚!

相關文章
相關標籤/搜索