Clickhouse压测
压测工具:
-
jemter
-
服务器监控脚本
sql准备:
- 简单sql
select * from tb_plan_student where plan_id=1122980766105344 and region_id=330302 limit 10
- 简单sql---部分字段
select student_id,student_name from tb_plan_student where plan_id=1122980766105344 and region_id=330302 limit 10
- 复杂sql
SELECT region_id AS area,
is_check,
COUNT( id ) AS count
FROM
tb_plan_student
WHERE
is_deleted = 0
AND is_count = 0
AND plan_id = 1125194023755520
AND city_id = 330300
GROUP BY region_id,is_check
- 插入sql
INSERT INTO tb_plan_student_test(id, plan_id, province_id, city_id, region_id, student_id, student_base_id,
student_name, pym, idcard, nationality, pro_code, birth, age, org_id, org_name, sex,
prefx, class_id, class_year, class_name, grade_id, grade_name, eye_is_check, is_check,
is_count, stu_code, remark, is_deleted, creator, operator, create_time, update_time,
identity, stu_type, not_status, parent_name, parent_phone, parent_is_agree)
VALUES (1122980769914624, 1122980766105344, 330000, 330300, 330302, 291941505000673280, 291941505000673280, '林可', 'lk', '330381201707033343', null, null, '2017-07-03', 6.0, 106, '温十六幼白鹭园区', '2', 1, 291941503981457408,
2020, '01', 921830381248259, '中班', 0, 0, 0, 'G330381201707033343', null, 0, 1115178929700608,
1115178929700608, '2023-05-06 14:30:14', '2023-05-06 14:30:14', 1, 1, 0, '', '', 0);
测试前服务器状况:
执行时间-------------------------------------------------2023-06-06_17:41:38
用户空间占用CPU百分比:0.8
内核空间占用CPU百分比:0.7
空闲CPU百分比:97.8
CPU 1分钟前到现在的负载平均值:0.20
内存使用率=14.13
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度m/s:0.00
每秒向sda设备发起的写请求速度m/s:0.00
网卡:ens192 每秒接收的数据量kb:4.81
网卡:ens192 每秒发送的数据量kb:1.44
场景一 :简单的sql,100个线程无限执行
执行时间-------------------------------------------------2023-06-06_17:42:42
用户空间占用CPU百分比:91.0
内核空间占用CPU百分比:7.5
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:6.11
内存使用率=21.58
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度m/s:0.00
每秒向sda设备发起的写请求速度m/s:0.02
每秒向sdb设备发起的读请求速度m/s:0.03
每秒向sdb设备发起的写请求速度m/s:0.00
网卡:ens192 每秒接收的数据量kb:41.03
网卡:ens192 每秒发送的数据量kb:114.73
网卡:docker0 每秒接收的数据量kb:104.05
网卡:docker0 每秒发送的数据量kb:33.81
执行时间-------------------------------------------------2023-06-06_17:43:25
用户空间占用CPU百分比:92.4
内核空间占用CPU百分比:17.4
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:40.51
内存使用率=21.46
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度m/s:0.00
每秒向sda设备发起的写请求速度m/s:0.00
每秒向sdb设备发起的读请求速度m/s:0.00
每秒向sdb设备发起的写请求速度m/s:0.00
网卡:ens192 每秒接收的数据量kb:39.57
网卡:ens192 每秒发送的数据量kb:114.33
网卡:docker0 每秒接收的数据量kb:92.68
网卡:docker0 每秒发送的数据量kb:37.05
场景二 :简单的sql,50个线程无限执行
执行时间-------------------------------------------------2023-06-06_17:52:07
用户空间占用CPU百分比:90.1
内核空间占用CPU百分比:9.8
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:7.96
内存使用率=21.64
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度m/s:0.00
每秒向sda设备发起的写请求速度m/s:0.51
每秒向sdb设备发起的读请求速度m/s:0.00
每秒向sdb设备发起的写请求速度m/s:0.00
网卡:ens192 每秒接收的数据量kb:40.85
网卡:ens192 每秒发送的数据量kb:104.92
网卡:docker0 每秒接收的数据量kb:103.14
网卡:docker0 每秒发送的数据量kb:155.97
执行时间-------------------------------------------------2023-06-06_17:52:18
用户空间占用CPU百分比:93.8
内核空间占用CPU百分比:8.3
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:23.79
内存使用率=22.08
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度m/s:0.00
每秒向sda设备发起的写请求速度m/s:0.00
每秒向sdb设备发起的读请求速度m/s:0.00
每秒向sdb设备发起的写请求速度m/s:0.00
网卡:ens192 每秒接收的数据量kb:146.70
网卡:ens192 每秒发送的数据量kb:690.29
网卡:docker0 每秒接收的数据量kb:809.32
网卡:docker0 每秒发送的数据量kb:257.86
执行时间-------------------------------------------------2023-06-08_18:05:34
用户空间占用CPU百分比:88.5
内核空间占用CPU百分比:7.5
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:50.17
内存使用率=30.88(后来清了系统缓存再次执行,内存使用率达到了30%,约增加5G内存)
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:34.53
网卡:ens192 每秒发送的数据量kb:130.11
网卡:docker0 每秒接收的数据量kb:84.13
网卡:docker0 每秒发送的数据量kb:31.24
场景三 :简单的sql,20个线程无限执行
执行时间-------------------------------------------------2023-06-07_09:31:28
用户空间占用CPU百分比:92.5
内核空间占用CPU百分比:9.8
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:13.13
内存使用率=21.76
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:40.32
网卡:ens192 每秒发送的数据量kb:106.18
网卡:docker0 每秒接收的数据量kb:95.13
网卡:docker0 每秒发送的数据量kb:41.10
执行时间-------------------------------------------------2023-06-07_09:31:39
用户空间占用CPU百分比:93.2
内核空间占用CPU百分比:8.2
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:21.37
内存使用率=21.85
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:44.64
网卡:ens192 每秒发送的数据量kb:99.94
网卡:docker0 每秒接收的数据量kb:103.90
网卡:docker0 每秒发送的数据量kb:39.05
执行时间-------------------------------------------------2023-06-08_18:10:32
用户空间占用CPU百分比:91.0
内核空间占用CPU百分比:8.9
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:22.28
内存使用率=23.30 (后来清了系统缓存再次执行,内存使用率达到了23%,约增加2.5G内存)
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:37.63
网卡:ens192 每秒发送的数据量kb:120.39
网卡:docker0 每秒接收的数据量kb:117.78
网卡:docker0 每秒发送的数据量kb:29.82
最后测了一下10个线程的情况,也已经达到了cpu瓶颈,吞吐量也能达到40了
场景四:简单sql---查询部分字段,50个线程无限执行
执行时间-------------------------------------------------2023-06-09_09:55:17
用户空间占用CPU百分比:91.5
内核空间占用CPU百分比:3.8
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:62.25
内存使用率=18.90
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:71.48
网卡:ens192 每秒发送的数据量kb:69.46
执行时间-------------------------------------------------2023-06-09_09:55:22
用户空间占用CPU百分比:95.5
内核空间占用CPU百分比:4.4
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:73.12
内存使用率=18.82
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:75.43
网卡:ens192 每秒发送的数据量kb:69.58
场景五:复杂的sql,20个线程无限执行
执行时间-------------------------------------------------2023-06-07_09:50:16
用户空间占用CPU百分比:97.0
内核空间占用CPU百分比:4.6
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:19.26
内存使用率=15.66
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:5673.50
网卡:ens192 每秒接收的数据量kb:34.34
网卡:ens192 每秒发送的数据量kb:33.62
网卡:docker0 每秒接收的数据量kb:26.36
网卡:docker0 每秒发送的数据量kb:36.90
执行时间-------------------------------------------------2023-06-07_09:50:27
用户空间占用CPU百分比:98.5
内核空间占用CPU百分比:2.3
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:34.56
内存使用率=15.71
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:8488.00
网卡:ens192 每秒接收的数据量kb:19.03
网卡:ens192 每秒发送的数据量kb:25.34
网卡:docker0 每秒接收的数据量kb:27.93
网卡:docker0 每秒发送的数据量kb:32.50
场景六:复杂的sql,50个线程无限执行
执行时间-------------------------------------------------2023-06-09_09:20:13
用户空间占用CPU百分比:97.7
内核空间占用CPU百分比:3.0
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:95.12
内存使用率=17.38
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:35.36
网卡:ens192 每秒发送的数据量kb:22.73
网卡:docker0 每秒接收的数据量kb:16.97
网卡:docker0 每秒发送的数据量kb:28.70
执行时间-------------------------------------------------2023-06-09_09:20:23
用户空间占用CPU百分比:95.6
内核空间占用CPU百分比:4.6
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:115.71
内存使用率=17.58
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:2980.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:35.85
网卡:ens192 每秒发送的数据量kb:22.48
网卡:docker0 每秒接收的数据量kb:41.60
网卡:docker0 每秒发送的数据量kb:14.46
场景七:简单sql和复杂sql同时运行,都是设置20个线程无限执行
执行时间-------------------------------------------------2023-06-09_09:34:05
用户空间占用CPU百分比:93.8
内核空间占用CPU百分比:5.3
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:17.26
内存使用率=19.05
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:35.92
网卡:ens192 每秒发送的数据量kb:74.24
网卡:docker0 每秒接收的数据量kb:55.72
网卡:docker0 每秒发送的数据量kb:31.46
执行时间-------------------------------------------------2023-06-09_09:34:16
用户空间占用CPU百分比:92.4
内核空间占用CPU百分比:9.2
空闲CPU百分比:0.0
CPU 1分钟前到现在的负载平均值:20.85
内存使用率=19.30
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:217.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:36.82
网卡:ens192 每秒发送的数据量kb:62.53
网卡:docker0 每秒接收的数据量kb:58.02
网卡:docker0 每秒发送的数据量kb:34.64
场景八:插入数据,20个线程无限执行
执行时间-------------------------------------------------2023-06-07_10:01:23
用户空间占用CPU百分比:3.6
内核空间占用CPU百分比:5.9
空闲CPU百分比:88.7
CPU 1分钟前到现在的负载平均值:0.74
内存使用率=14.49
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:5272.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:180.87
网卡:ens192 每秒发送的数据量kb:74.71
网卡:docker0 每秒接收的数据量kb:67.17
网卡:docker0 每秒发送的数据量kb:204.51
执行时间-------------------------------------------------2023-06-07_10:01:34
用户空间占用CPU百分比:8.1
内核空间占用CPU百分比:4.4
空闲CPU百分比:88.1
CPU 1分钟前到现在的负载平均值:0.63
内存使用率=14.50
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:15212.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:ens192 每秒接收的数据量kb:201.88
网卡:ens192 每秒发送的数据量kb:58.15
网卡:docker0 每秒接收的数据量kb:59.10
网卡:docker0 每秒发送的数据量kb:183.56
场景九:简单sql---查询部分字段,50个线程无限执行(cpu限制成2核)
执行时间-------------------------------------------------2023-06-12_15:48:30
用户空间占用CPU百分比:24.6
内核空间占用CPU百分比:2.2
空闲CPU百分比:73.2
CPU 1分钟前到现在的负载平均值:26.89
内存使用率=13.85
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:veth70b4f11 每秒接收的数据量kb:0.00
网卡:veth70b4f11 每秒发送的数据量kb:0.00
执行时间-------------------------------------------------2023-06-12_15:48:37
用户空间占用CPU百分比:23.9
内核空间占用CPU百分比:1.4
空闲CPU百分比:73.0
CPU 1分钟前到现在的负载平均值:32.51
内存使用率=13.81
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:0.00
网卡:veth70b4f11 每秒接收的数据量kb:0.00
网卡:veth70b4f11 每秒发送的数据量kb:0.00
场景九:简单sql---查询所有字段,50个线程无限执行(cpu限制成2核)
执行时间-------------------------------------------------2023-06-12_15:51:53
用户空间占用CPU百分比:0.8
内核空间占用CPU百分比:1.5
空闲CPU百分比:97.8
CPU 1分钟前到现在的负载平均值:1.84
内存使用率=12.20
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:104.00
每秒向sdb设备发起的写请求速度k/s:1087.00
网卡:veth70b4f11 每秒接收的数据量kb:0.00
网卡:veth70b4f11 每秒发送的数据量kb:0.00
执行时间-------------------------------------------------2023-06-12_15:52:00
用户空间占用CPU百分比:22.1
内核空间占用CPU百分比:4.3
空闲CPU百分比:71.9
CPU 1分钟前到现在的负载平均值:13.95
内存使用率=18.12
获取磁盘I/O统计信息
每秒向sda设备发起的读请求速度k/s:0.00
每秒向sda设备发起的写请求速度k/s:0.00
每秒向sdb设备发起的读请求速度k/s:0.00
每秒向sdb设备发起的写请求速度k/s:2100.00
网卡:veth70b4f11 每秒接收的数据量kb:0.00
网卡:veth70b4f11 每秒发送的数据量kb:0.00
clickhouse磁盘占用情况
1700万行数据(tb_plan_student约40个字段),原始数据占用0.6G的空间(相同数据在postgre存储需要6.5个G空间)
总结
-
clickhouse的压缩比非常高,所以磁盘占用空间很小
-
clickhouse会尽最大可能去占用cpu,所以在10个线程循环调用的时候已经把8核的cpu打满了,吞吐量已经达到了40次/秒的瓶颈。
-
由于吞吐量没有太高,所以网络带宽和磁盘IO都达不到瓶颈
-
经测试,内存使用率和返回的字段数量息息相关,返回字段多的时候(select *)内存使用率增加了15%,约5个G。返回两三个字段的时候,内存使用率增加了4%-6%,内存使用率大大降低,同时吞吐量也能得到50%的提升。
-
后面把clickhouse的cpu限制在两核,经测试,吞吐量降成了1/4左右,吞吐量几乎与核数是成正比的。
以上是基于单机clickhouse的压测结果。压测线程数从10个开始以后,一直增加到100个,ck的吞吐量都已经得不到提升,压力主要是在cpu,这也说明了ck不适合高并发查询的场景。就目前我们公司的场景而言,只是用于大屏和首页的查询,并非高并发场景,是可以使用clickhouse的。
标签:kb,压测,0.00,CPU,网卡,数据量,每秒,clickhouse From: https://www.cnblogs.com/mi520/p/18426608