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

article/2025/9/13 22:10:53

目录

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数据总量:

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总结

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

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

2.7 与Mysql8.0的图表分析

2.7.1查询时间对比

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

2.7.2吞吐量对比

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

无论是读写的效率,还是并发吞吐量, 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 RESTART10时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很少。


http://chatgpt.dhexx.cn/article/k0iHd2fJ.shtml

相关文章

memsql架构2

接上次的MemSQL分布式架构介绍(一),原文在这里:http://docs.memsql.com/latest/concepts/distributed_architecture/ 首先上张图,是我根据自己的理解画的,如有错误还请大家指出 几个概念 1、MemSQL有两种类型的表: ref…

MemSQL性能测试结果

1.查询的SQL select count(subie.user_id) as count from sum_user_basic_info_exp subie join sum_user_lend_info_exp sulie on sulie.user_idsubie.user_id where subie.curr_user_role_cd1 and subie.reg_dt >2016-08-29 and subie.reg_dt <2016-08-29 结…

【MySQL】SQL优化

SQL优化 1 插入数据 1.1 insert优化 如果我们需要一次性往数据库表中插入多条记录&#xff0c;可以从以下三个方面进行优化。 insert into tb_test values(1,tom); insert into tb_test values(2,cat); insert into tb_test values(3,jerry); .....1.批量插入数据 Insert…

MySQL慢SQL探究

文章目录 前言1、慢SQL捕获慢查询追踪配置方式 2、情况分析为什么查询会慢&#xff1f; 2.1 SQL执行计划分析explain执行计划分析PROFILE分析OPTIMIZER_TRACE分析 3、引擎参数配置分析I/O性能分析MySQL I/O参数 其他原因分析网络抖动单表数据量过大 总结 前言 我们在日常开发中…

【Mysql】SQL性能分析

【Mysql】SQL性能分析 文章目录 【Mysql】SQL性能分析1. SQL执行频率2. 慢查询日志3. profile详情4. explain 1. SQL执行频率 在控制台中通过命令 show [session|global] status 命令可以提供服务器状态信息。通过如下指令&#xff0c;可以查看当前数据库的 insert,update,del…

MemSQL可以为时间序列应用做些什么

版权声明&#xff1a;本文由腾讯云数据库产品团队整理&#xff0c;页面原始内容来自于db weekly英文官网&#xff0c;若转载请注明出处。翻译目的在于传递更多全球最新数据库领域相关信息&#xff0c;并不意味着腾讯云数据库产品团队赞同其观点或证实其内容的真实性。如果其他媒…

MySQL-SQL优化

文章目录 一、插入数据1、insert2、大批量插入数据 二、主键优化&#xff08;1&#xff09;数据组织方式&#xff08;2&#xff09;页分裂&#xff08;3&#xff09;页合并&#xff08;4&#xff09;索引设计原则 三、order by优化四、group by优化五、limit优化六、count优化1…

每秒1.28万亿行,最快的分布式关系数据库MemSQL又破记录了!

众所周知&#xff0c;如果交互式响应时间小于四分之一秒&#xff0c;那么人们会获得令人难以置信的满意度。当你提供的响应时间下降到大约四分之一秒时&#xff0c;交互对用户而言是即时的。 但是&#xff0c;由于大数据集和并发需求&#xff0c;给所有客户提供的速度水平似乎…

速度最快的数据库---MEMSQL的安装与部署

1. 什么是MEMSQL 前Facebook工程师创办的MemSQL公司获500万美元投资。号称世界上最快的分布式关系型数据库&#xff0c;兼容MySQL但快30倍&#xff0c;能实现每秒150万次事务。原理是仅用内存并将SQL预编译为C。2012年12月14&#xff0c;MemSQL 1.8 发布&#xff0c;号称最快的…

memsql-官宣世界最快的内存关系型数据库安装部署

官网地址&#xff1a;https://www.memsql.com/ 获取到的license:BGNhZmY4YjViM2Y1OTRhOTdiOTNlNTE0NmU3MGJhN2NlAAAAAAAAAAAEAAAAAAAAAAwwNAIYJLLETZcXn8NHKfJAS/Iai5hUjzaCMQ5PAhht2vDZAS1q1a49DPsq5gMGKY9AI0wmaSkAAA 1&#xff0c;memsql官网介绍 MemSQL 是一个分布式关系数…

memSQL简介

前言 由前Facebook工程师创办的MemSQL&#xff0c;号称世界上最快的分布式关系型数据库&#xff0c;兼容MySQL但快30倍&#xff0c;能实现每秒150万次事务。原理是仅用内存并将SQL预编译为C。 MemSQL 提供免费的开发者版本&#xff08;数据限制32G&#xff09;和全功能试用版…

统一异常处理解决方案

&#x1f481; 作者&#xff1a;小瓦匠 &#x1f496; 欢迎关注我的个人公众号&#xff1a;小瓦匠学编程。微信号&#xff1a;xiaowajiangxbc &#x1f4e2; 本中涉及到的所有代码资源&#xff0c;可以在公众号中获取&#xff0c;关注并回复&#xff1a;源码下载 &#x1f449;…

SpringBoot统一异常处理详解

文章目录 一、概述1、统一异常处理介绍2、原理和目标 二、Assert(断言)1、概述2、Assert自定义实战2.1 自定义接口Assert2.2 自定义异常2.3 Enum整合2.4 实战检测 三、统一异常处理器1、异常处理器说明1.1 handleServletException1.2 handleBindException和handleValidExceptio…

Shell 异常处理

原创&#xff1a;转载请注明出处 #!/bin/bash ##################服务器执行以下脚本############################# ## 重新上传脚本到服务器 -> 部署启动的脚本#当任何一行的命令执行错误的时候&#xff08;比如命令写错了&#xff09;直接退出&#xff0c;不继续往下执行…

java中的统一异常处理

目录 统一异常处理的原因 如果进行统一异常处理 1、编写统一异常处理类与方法 2、编写自定义异常类 3、定义异常枚举类 4、抛出指定异常 小提醒 统一异常处理的原因 在我们写代码的时候&#xff0c;因为各种场景需要进行各种校验&#xff0c;我们就可能会进行多种响应&…

JNI异常处理

前言 本文所要介绍的异常处理是指通过JNI调用java层方法时产生的异常处理&#xff0c;并不是指JNI调用Native层函数时产生的异常处理&#xff0c;如果童鞋们想要了解Native层的异常处理可以参考笔者之前的文章《C之异常处理》 按照java的经验&#xff0c;当发生异常而又没有捕…

Python——异常处理

文章目录 异常Python中的异常类捕获与处理异常自定义异常类with语句断言 异常 异常是在程序执行过程中发生的影响程序正常执行的一个事件。异常是Python对象&#xff0c;当Python无法正常处理程序时就会抛出一个异常。一旦Python脚本发生异常&#xff0c;程序需要捕获并处理它…

python异常处理输入不是整数_Python异常处理

异常处理: Python程序运行语法出错会有异常抛出不处理异常会导致程序终止 示例:用户输入一个整数转换成int型,如果用户输入的不是数字而是其他例如字母等则会出现异常 不使用异常处理代码的处理方法 #cat 异常处理.py abc = input("请输入一个数字") if not ab…

ARM的异常处理机制

异常种类 ARM共有如下7种异常模式&#xff1a; 复位&#xff08;RESET)&#xff1a;当处理器复位引脚有效时&#xff0c;系统产生复位异常中断。复位异常中断通常在系统加电和系统复位时发生&#xff0c;直接跳转到复位中断向量处执行称为软复位。未定义的指令&#xff08;UDE…

spring异常处理

在项目中采用spring的异常处理机制&#xff1a; 示例一、在Controller中加ExceptionHandler注解定义异常拦截的方法&#xff0c;在方法中定义返回的页面&#xff1a; Controller public class ExceptionTestController {ExceptionHandlerpublic String handleException(Excep…