数据库评测报告第一期:MySQL-5.7

一、MySQL-5.7有什么新特性?

MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。2015年最重磅的当属MySQL-5.7的发布,号称160万只读 QPS,大有赶超NoSQL趋势。新版本的MySQL-5.7在测试平台上每秒只读 QPS比MySQL-5.5近乎提升了两倍。同时该版本在数据库其他方面也得到不少改进:

  • 使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性;
  • 为多种编程语言提供了API;
  • 支持多线程,充分利用CPU资源,支持多用户;
  • 优化的SQL查询算法,有效地提高查询速度;
  • 提供TCP/IP、ODBC和JDBC等多种数据库连接途径;
  • 可以处理拥有上千万条记录的大型数据库;
  • 提供用于管理、检查、优化数据库操作的管理工具。

看到MySQL-5.7官方介绍中如此多的功能优化和性能提升,不免让人有些激动。这一期的评测报告就着重针对MySQL-5.7在SELECT和UPDATE 中的性能,通过与MariaDB-5.5的对比,展示下新版本MySQL的性能提升。

二、MySQL-5.7有哪些性能提升?

1、SELECT性能

MySQL-5.7对无索引字段的处理速率高于MariaDB-5.5

在许多针对数据库的压力测试中,都只关注于吞吐量的数值,追求高吞吐量的过程中,往往在进行SELECT测试时只针对建立过索引的字段进行测试,而忽略了在实际工作环境中针对数据库操作的不定性和复杂性因素所导致的用户(或者管理员)对数据中的读操作不仅仅局限于使用有索引的字段(出于成本、存储空间、效率等因素的考虑,为所有字段建立索引是不科学、低性价比的),在对未建立索引进行读操作时,系统不得不对表进行全扫描,其对系统整体的吞吐量将造成很大影响,但考虑到木桶效应(一只木桶能盛多少水,并不取决于最长的那块木板,而是取决于最短的那块木板),综合考虑有索引和无索引情况下数据库的效率才能综合的反映出数据库所具有的真实用户体验值,其实验数据才是更贴近实际工作环境的,更加具有参考价值。

针对无索引字段的测试结果(如下图所示),根据MySQL在无索引字段查找时进行全表扫面的原理,采用“扫描速率”作为衡量其整体性能的评价标准。

  • MySQL-5.7对于普通数据文件(1GB、50GB、100GB)的查询效率远高于MariaDB-5.5;
  • 当数据文件的大小达到系统内存的阈值时(250GB),MySQL-5.7的在200并发时的查询效率也能保持下28万左右,其数值也高于MariaDB-5.5的3万;
  • MySQL-5.7和MariaDB-5.5在无索引情况下的查询效率均受到数据规模和并发连接数的影响;
  • 并发连接数的增加对MySQL-5.7和MariaDB-5.5的查询性能影响高于因数据规模增加所带来的影响;
  • MySQL-5.7的性能随数据规模的变化情况比MariaDB5.5更加平滑;
  • 随着并发数的增加MySQL-5.7的查询效率比MariaDB-5.5更加趋于平稳;
  • 在数据量低于其物理内存的情况下,查询效率随并发数增加而产生的变化趋势十分相近,也就是说MySQL-5.7和MariaDB-5.5在性能在未达到阈值的情况下相对稳定的,不会随着数据集合规模的变化而发生较大波动。

MySQL-5.7索引查询吞吐率在高并发时的性能约为MariaDB-5.5的2倍

MySQL-5.7索引查询的可用性、稳定性均高于MariaDB-5.5

Thread Pool功能有效提高数据库在高并发时的性能近2倍

索引是对数据库表中一列或多列的值进行排序的一种结构。使用索引可快速访问数据库表中的特定信息。

什么是Thread Pool?MySQL的每个连接上来都要创建一个线程来执行语句。这样每一个新的连接进来即会创建一个新的线程,这种动作对MySQL本身压力比较大。Thread Pool是提供一种线程代理的模型执行每个连接的语句。而MySQL内部维护一个可能接受的线程总数,减少线程太多在CPU切换等方面的压力。但Thread Pool仅在MySQL的商业化版本中作为plugin的官方功能支持,MariaDB也实现了这一功能。

针无索引字段的测试结果(如下图所示),根据MySQL查找索引字段时原理,采用“吞吐量”作为衡量其整体性能的评价标准。

  • 对比MariaDB-5.5和MariaDB-5.5_TP,可以看出使用Thread Pool时系统吞吐率远高于不使用Thread Pool的情况,而且随着并发数的增加,差距越发明显;
  • 对比MariaDB-5.5和MySQL-5.7,可看出在低并发时,二者吞吐率差距不大,但随着并发连接数的增大,MySQL-5.7的吞吐将达到MariaDB-5.5的2倍左右;
  • 对比MariaDB-5.5_TP和MySQL-5.7,可以发现Thread Pool功能更能直接通过减少CPU的切换,提升系统在高并发时的吞吐率;
  • 对比三者曲线变化,不难看出MySQL-5.7的吞吐率变化更加平滑,且在并发连接不断增加的情况下,趋于稳定,系统整体性能的衰减程度低。虽然MariaDB-5.5_TP的吞吐率基数较高,但随着并发连接数的增加,吞吐率已经出现了与MariaDB-5.5相似的明显下降趋势(也可参考下图)。
  • MySQL-5.7、MariaDB-5.5、MariaDB-5.5_TP在使用索引查询时,并发连接数的增加成为了影响其吞吐率的关键因素。
  • 因采用索引机制,查询时不需要进行全表扫描,故其单表的数据量对MySQL-5.7、MariaDB-5.5、MariaDB-5.5_TP的查询吞吐率影响不大,仅在并发数达到10000时,MariaDB-5.5针对大数据文件的查询吞吐率开始出现明显波动。
  • 由于建立索引进行查询,可大大提高在大规模数据中(250GB数据表中,数据条数越有近2.8亿)的高并发查询的吞吐率。

2、UPDATE性能

MySQL-5.7中UPDATE的吞吐率、稳定性、可用性均高于MariaDB-5.5

MySQL-5.7UPDATE性能随负载增加的衰减趋势优于MariaDB-5.5

UPDATE作为数据库操作中最为频繁的操作之一,其操作由于涉及到数据查询、数值更新以及数据存储,该操作性能的优劣会对对数据库的用户体验和性能发挥造成重要影响。

针对不同版本和配置的数据库(MySQL-5.7、MariaDB-5.5、MariaDB-5.5_TP),UPDATE测试如下图所示,采用“吞吐量”作为衡量其整体性能的评价标准。

  • 对比MariaDB-5.5、MariaDB-5.5_TP、MySQL-5.7,明显看出MySQL-5.7的写性能,不论在低并发还是高并发的情况下(200~1000),均远高于MariaDB-5.5和MariaDB-5.5_TP,几乎为其的1.5倍;
  • 对比MariaDB-5.5和MariaDB-5.5_TP,可以看出在低并发时,二者UPDATE操作的吞吐率几乎差别不大。当并发数达到1000时,MariaDB-5.5_TP进行UPDATE操作的吞吐率几乎为MariaDB-5.5的2倍。
  • 对比三者随并发连接数变化的曲线,可以看出MySQL-5.7不仅吞吐量远高于另外二者,且曲线更为平滑,即说明在并发数不断增加的情况下,MySQL-5.7的写性能更加稳定,波动性和衰减率都低于MariaDB-5.5、MariaDB-5.5_TP;
  • 对比MariaDB-5.5和MariaDB-5.5_TP的曲线变化,可以看出,随着并发数增加,MariaDB-5.5在不使用Thread Pool功能的情况下性能下降趋势更为明显,而Thread Pool在高并发时对系统吞吐率有较积极的影响。
  • 对比MariaDB-5.5、MariaDB-5.5_TP、MySQL-5.7进行UPDATE操作的性能,可以看出,并发连接数对其吞吐率形象十分明显。
  • 对比MariaDB-5.5、MariaDB-5.5_TP、MySQL-5.7进行UPDATE操作的性能,可以看出,数据量的增加对MySQL-5.7进行UPDATE操作的吞吐率影响不大,而对于MariaDB-5.5来说,会产生少许影响,而MariaDB-5.5_TP则通过在定位查找时采用Thread Pool功能弥补了些许影响。

三、MySQL-5.7使用的建议?

通过以上测试数据和分析说明,给出如下结论:

  • MySQL-5.7在低并发情况下的读写性能与MariaDB-5.5差别不大,在高并发下情况下的读写性能远高于MariaDB-5.5;
  • MySQL-5.7读写性能的稳定性好于MariaDB-5.5;
  • MySQL-5.7读写性能随负载增加的衰减趋势优于MariaDB-5.5;
  • MySQL-5.7在内存利用率达到阈值的情况下,可用性高于MariaDB-5.5;
  • MySQL-5.7针对无索引字段的处理速率远高于MariaDB-5.5;
  • Thread Pool功能有效提高数据库在高并发时的性能近2倍,尤其在查询操作时效果更加明显。

通过以上测试结论,给出如下建议:

  • 仅从稳定性、效率、可用性考虑(忽略替换成本和复杂性成本),使用MySQL-5.7将能更好的提高系统性能和优化资源利用率(最好能使用商业版MySQL-5.7,可以使用Thread Pool功能,能提升整体性能);
  • 对于读操作为主要的核心服务,不更新数据库版本,进而选择开启Thread Pool服务,不仅能提高整体性能,也减少了更新版本所带来的开销和风险,也是一个不错的选择。

【数据库评测报告】第一期:MySQL-5.7的主要内容就是以上这些了,测试在进行过程中由于网络条件、数据库配置等因素的影响,可能无法发挥出TS90机器的最大性能,但在同一配置和运行环境在针对MariaDB-5.5和MySQL-5.7的测试,在一定程度上对于数据库选型具有参考价值。还想了解测试的参数和细节的朋友可以继续往下读。

四、环境配置包括哪些?

1、硬件环境

设备型号

配置描述

CPU型号

TS90

2个12核CPU,256G内存,12*800G SSD,万兆网卡

E5-2670v3

2、软件环境

①数据库版本

测设设备

数据库版本

TS90-1

MariaDB-5.5

TS90-2

MySQL-5.7

②数据库配置

3、测试细节

①测试工具

mysqlslap是MySQL自带的benchmark基准测试工具,该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较。

②测试流程

建立测试数据库database → 在数据库中建立结构相同的多个table → 利用脚本向table中分别插入一定数量的数据(1GB、50GB、100GB、250GB) → 利用mysqlslap对相应query语句进行测试(采用rand()随机取值并且多次测试取均值) → 结果数据的分析

③测试方案

  • SELECT测试
  • UPDATE测试

④测试表结构

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ImportSource

NoSQL-Quorums-仲裁

作者简介: ? 当你权衡“一致性”或“持久性”的时候,不是一个非此即彼,非黑即白的过程。一个请求中涉及的节点越多,那么我们越有可能避免不一致。这自然就引发了一个...

3395
来自专栏彭湖湾的编程世界

【计算机网络】网络层学习笔记:总结IP,NAT和DHCP

前言:这篇文章是学习网络层协议时候总结的笔记,前面的主要部分介绍的都是IP协议, 后半部分介绍NAT协议和DHCP协议 参考书籍 《计算机网络-自顶向下》   ...

2105
来自专栏Java架构沉思录

互联网是如何形成的

全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情...

1103
来自专栏Web项目聚集地

互联网是怎么形成的?

全世界几十亿台电脑,连接在一起,两两通信。上海的某一块网卡送出信号,洛杉矶的另一块网卡居然就收到了,两者实际上根本不知道对方的物理位置,你不觉得这是很神奇的事情...

891
来自专栏腾讯技术工程官方号的专栏

2017 Openstack Days China:虚拟机的IO模型分析

本文将其在2017年7月24日在北京举办的 China Openstack Days 上分享的内容进行整理,内容主要介绍了虚拟机的 IO 流程分析方法,几个特殊...

3042
来自专栏SDNLAB

多租户数据中心拥塞控制学习笔记(一)

(一)初步认识 >>>> 前言 网络领域顶级会议SIGCOMM2016一次性发表了两篇关于多租户数据中心拥塞控制的论文“Virtualized Congesti...

44311
来自专栏后端技术探索

Facebook 宣布开源 Katran,高性能第4层负载平衡器

为了管理Facebook的流量,他们部署了一个分布式PoP服务器作为数据中心的代理。鉴于极高的请求量,PoP和数据中心都面临着巨大挑战,比如如何将大量的后端服务...

842
来自专栏Linyb极客之路

性能测试之常见术语浅析

对被测系统不断施加压力,直到性能指标超过预期或某项资源使用达到饱和,以验证系统的处理极限,为系统性能调优提供依据;

1083
来自专栏SDNLAB

OpenStack网络基础

OpenStack在这几年风生水起。随着核心模块稳定性的提高,OpenStack已经有了很多大规模商用的案例,所有与云相关的,无论是商用软件还是开源平台都在积极...

3135
来自专栏土豆专栏

计算机网络概述

ps: internet(互联网或者互连网)是一个通用名词,泛指多个计算机网络互连而成的网络,在这些网络之间的通信协议可以是任意的;Internet(因特网)则...

96540

扫码关注云+社区