linux cpu占用率如何看
570
2022-10-22
用InfluxDB开源的性能测试工具对比InfluxDB和TDengine
前言
TDengine开源项目里已经包含了性能对比测试的工具源代码。-zxf tsdbcompare.tar.gz
解压后的目录结构如下:
.├── bin│ ├── bulk_data_gen│ ├── bulk_load_influx│ ├── bulk_load_tdengine│ ├── bulk_query_gen│ ├── query_benchmarker_influxdb│ └── query_benchmarker_tdengine├── config│ ├── TDDashboardSchema.toml│ └── TDengineSchema.toml├── data├── prepare.sh├── run.sh└── TDengine-client-1.6.4.5.tar.gz
bin 目录里是提前编译好的可执行文件,包括数据产生,数据加载,查询产生和查询加载。提前编译好方便大家下载即可用;如果有兴趣的同学也可以自己从源文件编译。源文件位于cmd下面的各个子目录里。可以自行编译后替换bin目录的文件。
config 目录里是TDengine写入数据需要用到的schema配置文件,模拟数据产生的数据通过schema配置里的信息可以知道该往哪个表里存。
data 目录是用来存储测试过程中产生的数据文件。本测试采用先产生模拟数据,并将模拟数据按各数据库的写入格式写到文件里,再用加载程序从文件里读取按格式写好的语句往各数据库里加载的方式来开展测试。这样的方法,能够将原始数据转换成不同的格式的过程带来的差异进行屏蔽,更纯粹的对比数据库的写入性能。
prepare.sh 是用来准备测试环境的脚本,包含三部分,1.安装docker程序,2.安装TDengine的客户端,3.拉取influxDB和TDengine的Docker镜像。
#!/bin/bashset -x#install dockercurl -fsSL -o get-docker.shsudo sh get-docker.sh#install tdengine clienttar -zxf TDengine-client-1.6.4.5.tar.gzcd TDengine-client-1.6.4.5./install_client.shcd ..#pull influxdb and tdengine docker imagesdocker pull influxdb docker pull tdengine/tdengine:v1.6.4.5.c
如果目标系统上已经安装了docker程序,就不用执行这个prepare.sh脚本了,可以直接按脚本里的第二、三部分去安装TDengine Client和拉取对应的Docker镜像。
在上面的步骤都执行完成,并确认成功后,可以开展测试工作了。
开展测试
在整个测试过程中,建议另开一个终端,运行top,查看系统的CPU和内存占用情况
top
写入测试
本测试包提供了一个run.sh脚本,自动执行将docker容器按指定IP地址运行起来,然后产生数据,写入数据文件,并写入时序数据库。
数据产生和写入由以下两条命令完成
#产生模拟数据并写入数据文件bin/bulk_data_gen -seed 123 -format influx-bulk -sampling-interval 1s -scale-var 10 -use-case devops -timestamp-start "2018-01-01T00:00:00Z" -timestamp-end "2018-01-02T00:00:00Z" >data/influx.datbin/bulk_data_gen -seed 123 -format tdengine -sampling-interval 1s -tdschema-file config/TDengineSchema.toml -scale-var 10 -use-case devops -timestamp-start "2018-01-01T00:00:00Z" -timestamp-end "2018-01-02T00:00:00Z" > data/tdengine.dat
解释一下以上的命令:按influxDB/TDengine的格式,以1秒一条数据的产生频率,模拟10台设备,以devops场景产生24小时的数据,并写入influx.dat文件。
Devops模型下,一台服务器会产生9类数据,分别是cpu,disk,mem,等,因此总共会产生7776000条数据记录。
数据文件完成后,就开始数据写入测试:
#数据写入数据库cat data/influx.dat |bin/bulk_load_influx --batch-size=5000 --workers=20 --urls="cat data/tdengine.dat |bin/bulk_load_tdengine --url 172.15.1.6:0 --batch-size 300 -do-load -report-tags n1 -workers 20 -fileout=false
上面命令的含义是以每批次写入5000/300条记录,分20个线程,将数据文件读取出来后写入influxDB/TDengine中
查询测试
在完成写入后,就开始查询测试。查询测试设定了四个查询用例的语句,每个查询语句都执行1000遍,然后统计总的查询用时:
1. 测试用例1,查询所有数据中,用8个hostname标签进行匹配,匹配出这8个hostname对应的模拟服务器CPU数据中的usage_user这个监控数据的最大值。
#TDenginebin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-all -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="-workers 50 -print-interval 0#InfluxDBbin/bulk_query_gen -seed 123 -format influx--query-type 8-host-all -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls=" -workers 50 -print-interval 0
2. 测试用例2,查询所有数据中,用8个hostname标签进行匹配,匹配出这8个hostname对应的模拟服务器CPU数据中的usage_user这个监控数据,以1小时为粒度,查询每1小时的最大值。
#TDenginebin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-allbyhr -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="-workers 50 -print-interval 0#InfluxDBbin/bulk_query_gen -seed 123 -format influx--query-type 8-host-allbyhr -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls=" -workers 50 -print-interval 0
3. 测试用例3,随机查询12个小时的数据,用8个hostname标签进行匹配,匹配出这8个hostname对应的模拟服务器CPU数据中的usage_user这个监控数据,以10分钟为粒度,查询每10分钟的最大值。
#TDenginebin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-12-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="-workers 50 -print-interval 0#InfluxDBbin/bulk_query_gen -seed 123 -format influx--query-type 8-host-12-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls=" -workers 50 -print-interval 0
4. 测试用例4,随机查询1个小时的数据,用8个hostname标签进行匹配,匹配出这8个hostname对应的模拟服务器CPU数据中的usage_user这个监控数据,以1分钟为粒度,查询每1分钟的最大值。
#TDenginebin/bulk_query_gen -seed 123 -format tdengine -query-type 8-host-1-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_tdengine -urls="-workers 50 -print-interval 0#InfluxDBbin/bulk_query_gen -seed 123 -format influx--query-type 8-host-1-hr -scale-var 10 -queries 1000 | bin/query_benchmarker_influxdb -urls=" -workers 50 -print-interval 0
查询过程结束后,将测试结果以以下格式打印出来
====================================================== tsdb performance comparision ====================================================== Writing 7776000 records test takes: InfluxDB | 95.00 Seconds TDengine | 25.12 Seconds ------------------------------------------------------ Query test cases: case 1: select the max(value) from all data filtered out 8 hosts Query test case 1 takes: InfluxDB | 82.51 Seconds TDengine | 1.01 Seconds ------------------------------------------------------ case 2: select the max(value) from all data filtered out 8 hosts with an interval of 1 hour case 2 takes: InfluxDB | 102.99 Seconds TDengine | 12.02 Seconds ------------------------------------------------------ case 3: select the max(value) from random 12 hours data filtered out 8 hosts with an interval of 10 min filtered out 8 hosts interval(1h) case 3 takes: InfluxDB | 42.66 Seconds TDengine | 6.72 Seconds ------------------------------------------------------ case 4: select the max(value) from random 1 hour data data filtered out 8 hosts with an interval of 1 min case 4 takes: InfluxDB | 5.17 Seconds TDengine | 1.98 Seconds ------------------------------------------------------
结果分析
通过本测试包产生的数据和相关的写入、查询用例测试可以看出,TDengine在性能上相比InfluxDB有较大的优势。
细致分析下来可以有以下结论:
写入性能:相同数据源InfluxDB写入用时约是TDengine的4倍全部数据聚合计算查询:InfluxDB查询用时约为TDengine的80倍全部数据聚合计算查询以小时为颗粒聚合结果:InfluxDB查询用时约为TDengine的10倍随机选取12小时的数据聚合计算查询以10分钟为颗粒聚合结果:InfluxDB用时约为TDengine的6倍随机选取1小时的数据聚合计算查询以1分钟为颗粒聚合结果:InfluxDB用时约为TDengine的2.5倍
通过top命令的观察,我们可以看到,测试用例执行时,InfluxDB的CPU占用率基本达到满负荷,以4核CPU的服务器为例,经常达到390%以上;而TDengine的CPU占用率则低很多。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~