NewSQL ---- Mysql.8.0 与 MemSQL 7.0 大数据量查询性能对比

目录

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

1.1测试环境

1.2测试用例设计

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

2.1 MemSQL时间范围分页查询

2.1.1 性能测试数据

2.2任务信息查询

2.2.1 性能测试数据

2.3 执行批次范围查询

2.3.1 性能测试数据

2.4 批次任务查询

2.4.1 性能测试数据

2.5 聚合查询

2.5.1 性能测试数据

2.5 系统资源监控数据

2.6总结

2.7 图表性能分析

2.7.1查询时间对比

2.7.2吞吐量对比

3 稳定性测试

3.1 docker重启以后

3.2 Linux系统重启

3.3 数据加载的过程中资源使用情况


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

1.1测试环境

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

1.1.1 Mysql 索引

1.1.1 MemSql 索引

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 千万级数据量性能测试对比

memsql数据总量:

NewSQL ---- Mysql.8.0 与 MemSQL 7.0 大数据量查询性能对比_第1张图片

MemSQL是兼容Mysql的,这里完全使用Mysql8.0的测试用例。

2.1 MemSQL时间范围分页查询

/mysql/result/20/20/2019-09-01/2019-09-30

2.1.1 性能测试数据

50 并发

100并发

200并发

 

2.2任务信息查询

/mysql/conditionOne/20/20/611607718939246592/611680047597752372

2.2.1 性能测试数据

50并发:

100并发:

200并发:

 

2.3 执行批次范围查询

/mysql/conditionTwo/10/20/1001,1002,1003,1004,1005,1027

2.3.1 性能测试数据

50并发:

100并发:

200并发:

 

2.4 批次任务查询

/mysql/conditionThree/1/20/1001,1002,1003,1004,1005,1027/611680047593558016,611680047593558017,611680047593558020,611680047593558021,611680047593558024,611680047593558025,611680047593558030,611680047593558031,611680047593558032,611680047593558033,611680047593558035,611680047593558036,611680047593558037,611680047593558038,611680047593558039,611680047593558040

2.4.1 性能测试数据

50并发:

100并发:

2.5 聚合查询

/mysql/aggregate/620656410385203201

2.5.1 性能测试数据

50并发:

100并发:

200并发:

2.5 系统资源监控数据

CPU

16时40分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
16时50分01秒     all     39.33      0.00      5.01      3.34      0.00     52.32
17时00分01秒     all     25.67      0.00      4.05      2.48      0.00     67.80
17时10分01秒     all      1.86      0.00      3.08      1.29      0.00     93.77
17时20分02秒     all      2.26      0.00      3.13      1.24      0.00     93.37
17时30分04秒     all      1.84      0.00      2.96      2.21      0.00     92.99
17时40分01秒     all      2.27      0.00      2.82      1.99      0.00     92.91
17时50分01秒     all      3.16      0.00      3.21      2.18      0.00     91.45
18时00分01秒     all      3.97      0.00      3.42      1.70      0.00     90.90
18时10分01秒     all      6.45      0.00      3.79      1.01      0.00     88.75
18时20分01秒     all      6.86      0.00      3.59      1.18      0.00     88.36
平均时间:        all      9.39      0.00      3.51      1.87      0.00     85.23

内存

16时40分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
16时50分01秒   2966432   8139692     73.29      2220   2383552  10562668     95.11   5623236   2194500      4380
17时00分01秒    130308  10975816     98.83      2116   2297124  13458496    121.18   8575500   2063500        16
17时10分01秒    156916  10949208     98.59      2116   2271268  13458028    121.18   8576780   2036728        20
17时20分02秒    186092  10920032     98.32      2116   2241232  13457620    121.17   8580188   2005396        12
17时30分04秒    180072  10926052     98.38      2116   2243972  13464844    121.24   8584348   2006720        24
17时40分01秒    162888  10943236     98.53      2116   2249536  13507180    121.62   8594588   2010620        20
17时50分01秒    178864  10927260     98.39      2116   2109184  14011032    126.16   8699564   1867336        20
18时00分01秒    162828  10943296     98.53      2116   2026732  14282360    128.60   8787316   1785472        20
18时10分01秒    196672  10909452     98.23      2116   1836412  14732260    132.65   8931256   1592412         4
18时20分01秒    183244  10922880     98.35      2116   1752204  14792552    133.19   9032440   1506536        20
平均时间:       450432  10655692     95.94      2126   2141122  13572704    122.21   8398522   1906922       454

磁盘读写

16时40分01秒       tps      rtps      wtps   bread/s   bwrtn/s
16时50分01秒     44.07      5.52     38.55   1092.66   5602.73
17时00分01秒     26.58      0.08     26.50      2.55   3506.34
17时10分01秒      7.19      0.17      7.03     10.61     35.38
17时20分02秒      6.69      0.03      6.66      0.76     37.23
17时30分04秒      6.80      0.12      6.67      8.37     34.57
17时40分01秒      8.71      0.28      8.43     12.84     47.90
17时50分01秒      8.32      0.06      8.26      5.52     44.09
18时00分01秒      6.42      0.00      6.42      0.00     32.32
18时10分01秒      6.65      0.00      6.65      0.00     33.06
18时20分01秒      6.66      0.14      6.52     16.72     32.13
平均时间:         12.81      0.64     12.17    115.01    940.68

在性能测试的过程中,系统的CPU 和磁盘I/O 占用率都比较低,基本不读磁盘,是从内存中查询数据,所以相对效率比较高。但是内存的占用率太高了,1千万的数据(加上索引)需要差不多8G的内存。之前我设置为6G,导入数据的时候一直报错,后来设置为8G才没有问题。

2.6总结

依据上面的测试数据给出对比图,这里使用性能测试结果中的平均值的极大值。

NewSQL ---- Mysql.8.0 与 MemSQL 7.0 大数据量查询性能对比_第2张图片

相对于TiDB 和CockroachDB ,MemSQL的性能要好的多,但是在并发量增加的时候,读的效率突然降低很多,说明MemSQL也是无法很好的处理高并发读的场景。但是MemSQL 总是在使用内存来处理I/O,所以它的写的效率很高。下面是我测试过程中同步数据的截图,这里都没有使用mysqldump,只是使用navicat,大概 需要11分钟可以同步1千万(3G)的数据量。相对于其他的NewSQL数据库,可以说就像兔子一样,跑的飞快。

NewSQL ---- Mysql.8.0 与 MemSQL 7.0 大数据量查询性能对比_第3张图片

2.7 与Mysql8.0的图表分析

2.7.1查询时间对比

以50%为分割线,占比少的说明效率高。MemSQL 使用多次测试结果中平均响应时间的极大值,Mysql使用极小值。参考 :Mysql.8.0 与 MongoDB.4.2大数据量查询性能对比. 中 mysql50并发的测试数据。

NewSQL ---- Mysql.8.0 与 MemSQL 7.0 大数据量查询性能对比_第4张图片

2.7.2吞吐量对比

以50%为分割线,占比多的说明吞吐量高。MemSQL 使用多次测试结果中平均响应时间的极大值,Mysql使用极小值。参考 :Mysql.8.0 与 MongoDB.4.2大数据量查询性能对比. 中 mysql50并发的测试数据.

NewSQL ---- Mysql.8.0 与 MemSQL 7.0 大数据量查询性能对比_第5张图片

无论是读写的效率,还是并发吞吐量, MemSQL  明显优于Mysql。

 

3 稳定性测试

这里侧重MemSQL系统恢复时间测试.

3.1 docker重启以后

docker重启以后:leaf 节点的数据仍然在内存中,不需要重新加载。这也是使用Dockers的好处

3.2 Linux系统重启

但是Linux系统重启以后 ,MemSQL会重新加载数据(1个leaf节点,1千万条数据)到内存,这个过程很快,大概2分钟左右,前提是SDD 硬盘。

3.3 数据加载的过程中资源使用情况

内存利用率变化

09时51分54秒       LINUX RESTART

10时00分01秒 kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
10时10分01秒   9989164   1116960     10.06      2220    557788   2559000     23.04    391564    489032        16
10时20分01秒    144980  10961144     98.69      2116   2034660  13460280    121.20   8701212   1821912        12
10时30分01秒    135964  10970160     98.78      2116   2037908  13469084    121.28   8707784   1825012        28
平均时间:       3423369   7682755     69.18      2151   1543452   9829455     88.50   5933520   1378652        19

CPU变化

10时00分01秒     CPU     %user     %nice   %system   %iowait    %steal     %idle
10时10分01秒     all      0.13      0.00      0.15      0.04      0.00     99.68
10时20分01秒     all     10.78      0.02      2.97      1.09      0.00     85.14
10时30分01秒     all      2.11      0.00      3.53      0.36      0.00     94.01
平均时间:        all      4.31      0.01      2.19      0.49      0.00     93.00

磁盘I/O读写变化

10时00分01秒       tps      rtps      wtps   bread/s   bwrtn/s
10时10分01秒      0.77      0.50      0.27    269.23      3.95
10时20分01秒     32.89     24.52      8.37   9744.26     93.79
10时30分01秒      6.73      0.09      6.64      9.95     36.12
平均时间:        13.46      8.37      5.09   3341.06     44.62

9:51分系统重启,然后在10时10分 和 10时20分之间 重启了memsql,。这期间系统的内存、CPU 和磁盘read 都上升很快,但是write很少。

你可能感兴趣的:(数据存储,分布式系统)