Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >数据库评测报告第一期:MySQL-5.7

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

原创
作者头像
迪B哥
修改于 2017-08-16 06:47:06
修改于 2017-08-16 06:47:06
3K0
举报
文章被收录于专栏:MySQL实战分享MySQL实战分享

一、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测试

④测试表结构

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
mysql优化
上篇文章是关于mysql优化的,那个内容是我大学的时候学习的笔记,最近学习发现一些比较好的内容,在这里分享给大家。 版权源于网上。 工作中使用最多的就是MySQL, 但是mysql的优化也就是通过建索
若与
2018/04/25
1.9K0
mysql优化
程序员必须掌握的MySQL优化指南(上)
MySQL作为最流行的关系型数据库之一,基本上每个开发人员都使用过,在平时工作中难免会遇到性能的问题,本篇从多个角度详细的介绍了,关于MySQL最常用的优化方法,包括字段类型,索引使用,SQL语句,参数调优,分库,分表,分片,缓存,以及通过中间件,NoSQL等。相信你认真读完之后一定会受益匪浅。
终码一生
2022/04/14
3490
数据库性能评测:整体性能对比
导语 随着版本升级,关系型数据库和缓存数据库整体性能比之前都有大幅度的提升,衡量数据库性能的三个重要指标是:数据库吞吐量(QPS)、延迟时长(Latency)和稳定性,以下从这三个方面对几种数据库进行
李俊飞
2017/07/04
23.3K2
数据库性能评测:整体性能对比
【数据库评测报告】第三期:innodb、tokudb压缩性能
这一期的数据库测评报告让咱们一起来讨论下数据压缩这一话题。
迪B哥
2018/11/29
2.7K0
MySQL5.7配置文件详细说明
# 客户端设置 [client] port = 3306 # 默认情况下,socket文件应为/usr/local/mysql/mysql.socket,所以可以ln -s xx /tmp/mysql.sock socket = /tmp/mysql.sock # 服务端设置 [mysqld] ########################################################################################################
JavaEdge
2022/11/30
1K0
MySQL 5.7优化
MySQL 5.7 提供了众多参数用于优化数据库性能,具体优化取决于你的硬件资源、应用需求、查询模式以及数据规模。下面将从InnoDB存储引擎、查询缓存、连接管理、日志与事务、内存管理、并发控制等几个方面详细介绍可优化的参数及其推荐值。
九转成圣
2025/02/20
1980
Amazon Aurora:云时代的数据库 ( 下)
本文介绍了云数据库在云原生应用中的重要性,并探讨了Aurora在云数据库中的特殊地位。作者通过回顾Aurora的设计、架构、性能和成本优势,以及它在云原生应用和微服务架构中的使用,展示了Aurora在云数据库领域中的领导地位。此外,文章还介绍了Aurora在Google Cloud Platform和Amazon Web Services中的使用情况,以及Aurora未来的发展方向。
谭伟华)
2017/08/04
2K0
Amazon Aurora:云时代的数据库  ( 下)
MYSQL 8 vs MYSQL 5.7 ORACLE 到底怎么想的? (二)
1 在MYSQL 5.7 临时表包含了一个 "converting HEAP to on disk", 意思当临时表达到最大的内存使用的限制(一个表一个)16MB,则系统就要将这个临时表放到磁盘上了,但MYSQL 8.0 将这个默认的临时表的设置变成1GB
AustinDatabases
2019/11/04
3.7K0
MYSQL 8 vs MYSQL 5.7  ORACLE 到底怎么想的? (二)
MySQL大表优化技术,你都会了吗?
除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量:
Bug开发工程师
2020/04/15
6130
数据库评测报告第二期:MongoDB-3.2
一、什么是MongoDB? MongoDB是一个开源的,基于分布式的,面向文档存储的非关系型数据库,使用JSON风格来存储数据。其也是非关系型数据库当中功能最丰富、最像关系数据库的。MongoDB由C
迪B哥
2017/07/13
2.8K0
数据库评测报告第二期:MongoDB-3.2
MySQL层相关优化
1.1、关于版本选择 官方版本我们称为ORACLE MySQL,这个没什么好说的,相信绝大多数人会选择它。 Percona分支版本,它是一个相对比较成熟的、优秀的MySQL分支版本,在性能提升、可靠性、管理型方面做了不少改善。它和官方ORACLE MySQL版本基本完全兼容,并且性能大约有20%以上的提升,因此我优先推荐它,我自己也从2008年一直以它为主。 另一个重要的分支版本是MariaDB,说MariaDB是分支版本其实已经不太合适了,因为它的目标是取代ORACLE MySQL。它主要在原来的MySQ
MySQL轻松学
2018/03/09
9670
Mysql实例 数据库优化--结构和性能优化
当开发人员设计好表语句后,就需要运维工程师进行服务部署,项目上线。这里应该根据需求进行预估访问量,再进行配置的选择和结构设计。
陈不成i
2021/06/16
2.4K0
看MySQL的参数调优及数据库锁实践有这一篇足够了
对于访问数据库来说,建立连接的代价是比较昂贵的,因为我们频繁的创建关闭连接,是比较耗费资源的,我们有必要建立数据库连接池,以提高访问的性能。
海仔
2019/08/05
2.5K0
看MySQL的参数调优及数据库锁实践有这一篇足够了
听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!
2、 确保表中的每列都和主键相关(不然东一句西一句就乱了) 每张表中只有一个主键 建立在第一范式之上的,一个表中只能保存一种数据 不可以把多种数据保存在同一张数据库表中~
不吃小白菜
2020/09/03
7480
听说Mysql你很豪横?-------------深入解析mysql数据库中的事务!
比较全面的MySQL优化参考
本文整理了一些MySQL的通用优化方法,做个简单的总结分享,旨在帮助那些没有专职MySQL DBA的企业做好基本的优化工作,至于具体的SQL优化,大部分通过加适当的索引即可达到效果,更复杂的就需要具体分析了。 版本的选择 官方版本我们称为ORACLE MySQL,这个没什么好说的,相信绝大多数人会选择它。 我个人强烈建议选择Percona分支版本,它是一个相对比较成熟的、优秀的MySQL分支版本,在性能提升、可靠性、管理型方面做了不少改善。它和官方ORACLE MySQL版本基本完全兼容,并且性能大约有2
wangxl
2018/03/08
1.1K0
【数据库评测报告】MyRocks VS MySQL57
本文介绍了MySQL 5.6中InnoDB存储引擎的压缩特性,通过对比非压缩和压缩状态下的性能表现,展示了压缩特性对数据库性能的提升。同时,文章还介绍了MySQL 5.7中InnoDB存储引擎的新特性,包括JSON支持、Full Text Search、InnoDB Cluster等,并探讨了这些新特性对MySQL 5.7性能的影响。
周奇
2017/07/07
5.2K0
【数据库评测报告】MyRocks VS MySQL57
MySQL性能调优 – 你必须了解的15个重要变量
1.DEFAULT_STORAGE_ENGINE 如果你已经在用MySQL 5.6或者5.7,并且你的数据表都是InnoDB,那么表示你已经设置好了。如果没有,确保把你的表转换为InnoDB并且设置default_storage_engine为InnoDB。 为什么?简而言之,因为InnoDB是MySQL(包括Percona Server和MariaDB)最好的存储引擎 – 它支持事务,高并发,有着非常好的性能表现(当配置正确时)。 2.INNODB_BUFFER_POOL_SIZE 这个是InnoDB最
老七Linux
2018/05/31
4.1K0
迎接重生,微盟数据库全面上云纪实
在经历了惨痛的黑天鹅事件以及激烈的数据恢复过程后,作为微盟DBA的我们进行了深刻的反省和自查,作为公司的核心资产,数据库也得到了前所未有的重视。如何保证数据安全以及用户服务的高可用性是我们要解决的首要问题。
腾讯云数据库 TencentDB
2020/05/08
1.4K0
构建高大上的MySQL监控平台
对于MySQL的监控平台,相信大家实现起来有很多了:基于天兔的监控,还有基于zabbix相关的二次开发。相信很多同行都应该已经开始玩起来了。我这边的选型是prometheus + granafa的实现方式。简而言之就是我现在的生产环境使用的是prometheus,还有就是granafa满足的我的日常工作需要。
星哥玩云
2022/08/18
1.1K0
构建高大上的MySQL监控平台
MySql数据库性能诊断工具Mysqltuner.pl
MySQLTuner-perl一个常用的数据库性能诊断工具,主要检查参数设置的合理性包括日志文件、存储引擎、安全建议及性能分析。针对潜在的问题,给出改进的建议,是mysql优化的好帮手。
DBA实战
2024/09/06
2680
MySql数据库性能诊断工具Mysqltuner.pl
相关推荐
mysql优化
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档