1测试环境以及测试用例设计

1.1测试环境

Mysql 和CockroachDB都是 4C/8G,测试接口都是通过Spring boot 微服务rest接口测试。MySQL 数据中和CockroachDB的表都创建了相同的索引。其中create_time 都使用了降序索引。

1.1.1 Mysql 索引

1.1.1 CockroachDB 索引

1.2测试用例设计

1.2.1时间范围分页查询参数

/result/{page}/{size}/{startTime}/{endTime}

1.2.2根据任务信息查询参数:

/conditionOne/{page}/{size}/{powerDeviceId}/{taskId}

1.2.3执行批次范围查询参数:

/conditionTwo/{page}/{size}/{batchIdList}

1.2.4执行任务与批次范围查询参数:

/conditionThree/{page}/{size}/{batchIdList}/{taskIdList}

1.2.5聚合查询,采集计划前10个批次数据聚合:

/aggregate/{planId}

会使用group by 和 order by 以及limit。

2 千万级数据量性能测试对比

数据总量:

 

 

 

2.1 cockroachdb时间范围分页查询

/cockroachdb/result/20/20/2019-09-03/2020-08-04

2.1.1 性能测试数据

50 并发测试

100并发

200并发

500并发

隔了3分钟

2.1.2 系统监控数据

内存使用情况:

22时30分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
22时40分01秒   1880544   6098292     76.43      2220   2184108   6568580     82.33   3987696   1820088        20
22时50分01秒   1631876   6346960     79.55      2220   2302744   6539428     81.96   4122676   1930460        36
23时00分01秒    137184   7841652     98.28      2116   2144220   6608160     82.82   5874008   1669516        28
23时10分02秒    144184   7834652     98.19      2116   2073348   6617156     82.93   6038644   1498088        36
23时20分01秒    141044   7837792     98.23      2116   2630728   6552772     82.13   5442264   2105004        28

Cpu 使用情况:

22时30分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
22时40分01秒     all     17.13      0.00     12.76      6.78      0.00     63.34
22时50分01秒     all      3.45      0.00      2.59      6.01      0.00     87.96
23时00分01秒     all      9.14      0.00      3.12      6.55      0.00     81.19
23时10分02秒     all      3.44      0.00      2.25      9.95      0.00     84.36
23时20分01秒     all      9.60      0.00      2.17      4.24      0.00     83.99
平均时间:        all      8.44      0.00      4.47      6.70      0.00     80.39

磁盘:

22时30分01秒       tps      rtps      wtps   bread/s   bwrtn/s
22时40分01秒    245.67      2.83    242.83    682.07   1924.37
22时50分01秒     24.77      0.05     24.73      1.43    529.80
23时00分01秒     30.84      8.32     22.53   1196.91    536.13
23时10分02秒     22.51      2.73     19.78     86.96    489.74
23时20分01秒     37.10      9.46     27.64   2931.17    576.60
23时30分01秒     25.81      1.10     24.70    312.01    543.45
平均时间:        64.46      4.08     60.38    867.82    766.73

2.2 cockroachdb任务信息查询

/cockroachdb/conditionOne/2/20/598855984873701376/620656411052097536

2.2.1 性能测试数据

50并发:

100并发:

200并发:

2.2.2 系统监控数据

内存使用:

00时10分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
00时20分01秒    325708   7653128     95.92         0    808552   7055688     88.43   6755072    647884       168
00时30分01秒    174832   7804004     97.81         0    676232   7230624     90.62   7061768    488056        32
00时40分01秒    230312   7748524     97.11         0    429984   7329160     91.86   7218156    280556        32
平均时间:    243617   7735219     96.95         0    638256   7205157     90.30   7011665    472165        77

CPU使用:

00时10分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
00时20分01秒     all     36.66      0.00      3.52      3.74      0.00     56.09
00时30分01秒     all     71.57      0.00      3.70      1.65      0.00     23.08
00时40分01秒     all     43.41      0.00      4.85      3.09      0.00     48.65
平均时间:     all     50.49      0.00      4.02      2.83      0.00     42.66

磁盘使用:

00时10分01秒       tps      rtps      wtps   bread/s   bwrtn/s
00时20分01秒     32.91      5.92     26.99    474.27    543.52
00时30分01秒     30.17      3.41     26.76    160.71    580.36
00时40分01秒     31.76      6.82     24.94    965.01    523.28
平均时间:        31.61      5.38     26.23    533.34    549.05

2.3 cockroachdbl执行批次范围查询

/cockroachdb/conditionTwo/10/20/10200,10254,10401,10445,10492,30194

2.3.1 性能测试数据

50并发:

100并发:

200并发:

2.3.2 系统监控数据

CPU:

00时40分01秒     all     43.41      0.00      4.85      3.09      0.00     48.65
00时50分01秒     all      6.35      0.00      5.49      5.45      0.00     82.71
01时00分01秒     all      6.39      0.00     18.01     41.60      0.00     33.99

内存:

00时40分01秒    230312   7748524     97.11         0    429984   7329160     91.86   7218156    280556        32
00时50分01秒    263680   7715156     96.70         0    286144   7603044     95.29   7305396    159028       120
01时00分01秒   2973028   5005808     62.74         0    409228   6378332     79.94   4440356    328892        32

硬盘:

00时10分01秒       tps      rtps      wtps   bread/s   bwrtn/s
00时40分01秒     31.76      6.82     24.94    965.01    523.28
00时50分01秒     27.08      5.50     21.59    173.05    502.61
01时00分01秒    938.94    932.31      6.63 204102.59    162.60

2.4cockroachdb批次任务查询

2.4.1 性能测试数据

50并发:

100并发:

200并发:

2.4.2 系统监控数据

CPU:

00时10分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
01时00分01秒     all      6.39      0.00     18.01     41.60      0.00     33.99
01时10分01秒     all      8.70      0.00      5.94      4.19      0.00     81.17

内存:

00时10分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
01时00分01秒   2973028   5005808     62.74         0    409228   6378332     79.94   4440356    328892        32
01时10分01秒   5032084   2946752     36.93         0    705304   8054932    100.95   2148272    560096        96

磁盘读写:

00时10分01秒       tps      rtps      wtps   bread/s   bwrtn/s
01时00分01秒    938.94    932.31      6.63 204102.59    162.60
01时10分01秒     21.50      4.14     17.36   1081.46    897.68

2.5 cockroachdb聚合查询

/cockroachdb/aggregate/620656410385203201

2.5.1 性能测试数据

50并发:

100并发:

200并发:

2.6总结

依据上面的测试数据给出对比图

由于LSM架构(Log Structured Merge Tree),rocksdb的读性能存在问题。这也是为什么 TiDB 和 cockroachDB 都建议使用SSD。另外由于每个节点都有备份(一般3份)写入rocksdb,这样写放大也会导致写的效率降低。再看系统监控的数据,磁盘读写其实并不多,但是内存使用率很高,说明cockroachDB有效利用了缓存,会将数据预加载到内存中,从而提高了读的效率,但是当读的并发量增加时,读效率突然降低很多,说明cockroachDB还是无法很好的处理高并发读的场景。

 

3 与MYSQL8 的性能对比

依据测试结果,这里只针对较少并发量的情况下 CockroachDB 与 MYSQL8  的读性能对比。MYSQL8 的性能数据 参考 :Mysql.8.0 与 MongoDB.4.2大数据量查询性能对比.

不同的测试用例查询时间对比:以50%为分割线,占比少的说明效率高。用性能测试采集到的最优的性能数据来对比。

吞吐量对比:以50%为分割线,占比多的说明吞吐量高。用性能测试采集到的最优的性能数据来对比。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐