0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MySQL 5.7与MySQL 8.0 性能对比

数据分析与开发 来源:数据分析与开发 作者:数据分析与开发 2020-11-03 09:26 次阅读

背景

测试mysql5.7和mysql8.0分别在读写,选定,只写模式下不同并发时的性能(tps,qps)

最早

测试使用版本为mysql5.7.22和mysql8.0.15

sysbench测试前先重启mysql服务,并清除os的缓存(避免多次测试时命中缓存)

每次进行测试都是新生成测试数据后再进行mysql5.7和mysql8.0的测试

每次测试时保证mysql5.7和mysql8.0的配置参数一致

环境

机器cat / etc / redhat-release |xargs echo'版本'&& dmidecode -s系统产品名称|xargs echo'是否虚拟化'&& cat / proc / cpuinfo | grep“ processor” | wc -l |xargs echo'cpu核数'版本CentOS Linux版本7.5.1804(核心)是否虚拟化KVM cpu核数4

myql5.7.22

5.7.22-log innodb_buffer_pool_size128M innodb_log_buffer_size64M innodb_log_file_size48M binlog_formatROW log_binON transaction_isolationREPEATABLE-READ

mysql8.0.15

8.0.15 innodb_buffer_pool_size128M innodb_log_buffer_size64M innodb_log_file_size48M binlog_formatROW log_binON transaction_isolationREPEATABLE-READ

系统平台

sysbench-V sysbench1.1.0(usingbundledLuaJIT2.1.0-beta3)

测试

在不同的持久化策略下(binlog,重做日志持久化)mysql5.7和mysql8.0在读写模式,引用模式,只写模式(oltp_read_write,oltp_read_only,oltp_write_only)下的性能表现

sysbench测试时间为60s,测试的表数量为20

测试分别在双1模式(安全性)和0 2模式(高级)下进行

参数 任选值 意味着
sync_binlog 0 binlog刷盘持久化由操作系统完成,性能好,存在丢失binlog的风险
sync_binlog 1个 事务提交后刷盘持久化,最安全
sync_binlog ñ 在每N个事务提交后进行刷盘持久化
innodb_flush_log_at_trx_commit 0 每秒钟写redo log并刷盘持久化
innodb_flush_log_at_trx_commit 1个 事务提交后写redo log并刷盘持久化,最安全
innodb_flush_log_at_trx_commit 2 事务提交后写redo log,两次刷盘持久化

双1模式下

SHOWGLOBALVARIABLESWHEREVariable_nameIN('sync_binlog','innodb_flush_log_at_trx_commit'); +--------------------------------+-------+ |Variable_name|Value| +--------------------------------+-------+ |innodb_flush_log_at_trx_commit|1| |sync_binlog|1| +--------------------------------+-------+

mysql5.7和mysql8.0在读写模式下的表现

双1配置,读写模式下,mysql5.7.22和mysql8.0.15 tps,qps性能差不多,mysql8.0.15在120线程并发时,性能出现了下降幅度

mysql5.7和mysql8.0在预期模式下的表现

双1配置,预期模式下,mysql5.7.22的tps,qps比mysql8.0.15好1/3左右;并发线程数增加后,tps,qps并没有增加,反而出现了下降的趋势

mysql5.7和mysql8.0在只写模式下的表现

双1配置,只写模式下,转换并发数的上升,mysql5.7.22的性能比mysql8.0.15好1/4左右

0 2模式下

SHOWGLOBALVARIABLESWHEREVariable_nameIN('sync_binlog','innodb_flush_log_at_trx_commit'); +--------------------------------+-------+ |Variable_name|Value| +--------------------------------+-------+ |innodb_flush_log_at_trx_commit|2| |sync_binlog|0| +--------------------------------+-------+

mysql5.7和mysql8.0在读写模式下的表现

0 2配置,读写模式下,并发数低时,mysql5.7.22性能好于mysql8.0.15;并发数比较高时,mysql8.0.15性能好于mysql5.7.22;在80线程的并发以上时,性能开始下降

mysql5.7和mysql8.0在预期模式下的表现

0 2配置,预期模式下,mysql5.7.22性能比mysql8.0.15好1/3左右;转换并发数的上升,性能也没有上升,反而有下降的趋势

mysql5.7和mysql8.0在只写模式下的表现

0 2配置,只写模式下,mysql5.7.22的tps顶点比较大;mysql5.7.22的qps比mysql8.0.15好1/3左右

摘要

整体来看,mysql5.7.22在读写模式,扩展模式,只写模式下的表现是mysql8.0.15的

随着并行数的增加,性能表现不会也跟着增加,将会出现下降

本次测试结果是在配置很低的情况下进行的,不代表绝对

注意sysbench需要设置--db-ps-mode = disable禁用预编译语句,不然并发测试线程多时会报下面的错误。致命:mysql_stmt_prepare()失败致命:MySQL错误:1461“不能创建超过max_prepared_stmt_count语句(当前值:16382)“致命:mysql_stmt_prepare()失败致命:MySQL错误:1461”不能创建超过max_prepared_stmt_count语句(当前值:16382)“致命:thread_init' function failed: /usr/local/share/sysbench/oltp_common.lua SQL API error FATAL: mysql_stmt_prepare() failed FATAL: MySQL error: 1461 "Can't create more than max_prepared_stmt_count statements (current value: 16382)" FATAL:thread_init'函数失败:/ usr / local / share / sysbench / oltp_common.lua:288:SQL API错误致命:mysql_stmt_prepare()失败

使用脚本

catsysbench_test_mysql5.7_8.0_tps_qps.sh #!/bin/bash #用于sysbench测试在读写模式、只读模式、只写模式下mysql5.7和mysql8.0的tps,qps #nohupbash$0>/tmp/sysbench_test2>&1& # user=admin passwd=admin ports="801557222" host=127.0.0.1 sysbench_test_mode="oltp_read_writeoltp_read_onlyoltp_write_only" sysbench_test_info_path=/tmp/sysbench-test functionred_echo(){ localwhat="$*" echo-e"$(date+%F-%T)e[1;31m${what}e[0m" } functioncheck_las_comm(){ if[$1-ne0];then red_echo$2 exit1 fi } functionrestart_mysqld(){ servicemysqld${1}restart sleep2 } functionpurge_binlog(){ port=$1 mysql-u$user-p$passwd-P$port-h$host</proc/sys/vm/drop_caches } functionsysbench_with_diff_thread(){ thread_num=$1 port=$2 order=$3 test_mode=$4 sysbench/usr/local/share/sysbench/${test_mode}.lua--mysql_storage_engine=innodb--table-size=100000--tables=20--mysql-db=test_1--mysql-user=$user--mysql-password=$passwd--mysql-port=$port--mysql-host=$host--threads=$thread_num--time=60--report-interval=2--db-ps-mode=disable--events=0--db-driver=mysql$order } functionmain(){ fortest_modein$sysbench_test_mode;do forportin$ports;do forthread_numin{5,10,20,30,40,80,120,200};do restart_mysqld"$port" check_las_comm"$?""restartmysqld${port}failed" clean_os_cache purge_binlog"$port" red_echo"sysbench$thread_numthreadscleanupmysqld${port}" sysbench_with_diff_thread"$thread_num""$port""cleanup""$test_mode">/dev/null red_echo"sysbench$thread_numthreadspreparemysqld${port}" sysbench_with_diff_thread"$thread_num""$port""prepare""$test_mode">/dev/null mkdir-p$sysbench_test_info_path red_echo"sysbench$thread_numthreadsrunmysqld${port}$test_mode" sysbench_with_diff_thread"$thread_num""$port""run""$test_mode">$sysbench_test_info_path/${test_mode}_${thread_num}_$port #servicemysqld{port}stop done done done } main

责任编辑:xj

原文标题:MySQL 5.7 & MySQL 8.0 性能对比

文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • MySQL
    +关注

    关注

    1

    文章

    775

    浏览量

    26003
  • MYSQL数据库
    +关注

    关注

    0

    文章

    95

    浏览量

    9277

原文标题:MySQL 5.7 & MySQL 8.0 性能对比

文章出处:【微信号:DBDevs,微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    怎么简单实现由Labview读取的串口数据自增写入mysql5.7数据库中?

    怎么简单实现由Labview读取的串口数据自增写入mysql5.7数据库中? 已实现:串口数据的接收处理 mysql5.7的安装(已测试数据库正常运行) 愿付费解决此问题(QQ:84295699)感谢
    发表于 01-11 22:05

    mysql密码忘了怎么重置

    mysql密码忘了怎么重置  MySQL是一种开源的关系型数据库管理系统,密码用于保护数据库的安全性和保密性。如果你忘记了MySQL的密码,可以通过以下几种方法进行重置。 方法一:使用MySQ
    的头像 发表于 12-27 16:51 846次阅读

    GitHub底层数据库无缝升级到MySQL 8.0的经验

    GitHub 团队近日分享了他们将 GitHub.com 的底层数据库无缝升级到 MySQL 8.0 的经验。 据介绍,GitHub 使用 MySQL 来存储大量关系数据,因此在不影响网站服务级别
    的头像 发表于 12-13 10:21 230次阅读
    GitHub底层数据库无缝升级到<b class='flag-5'>MySQL</b> <b class='flag-5'>8.0</b>的经验

    MySQL5.7数据导入8.0版本,这3款工具值得收藏!

    MySQL 5.7数据库迁移到MySQL 8.0可以使用NineData、MySQL Shell、Percona XtraBackup和L
    的头像 发表于 11-29 16:47 423次阅读
    <b class='flag-5'>MySQL5.7</b>数据导入<b class='flag-5'>8.0</b>版本,这3款工具值得收藏!

    MySQL性能优化方法

    MySQL 性能优化是一项关键的任务,可以提高数据库的运行速度和效率。以下是一些优化方法,包括具体代码和详细优化方案。
    的头像 发表于 11-22 09:59 266次阅读

    安装sqlyog之前要装mysql

    在安装 SQLyog 前是否需要安装 MySQL 取决于您的情况。MySQL 是一个关系型数据库管理系统,而 SQLyog 是一个可视化数据库管理工具,主要用于管理和操作 MySQL 数据库。 对于
    的头像 发表于 11-21 11:02 574次阅读

    MySQL导出的步骤

    MySQL是一种常用的关系型数据库管理系统,用于存储和管理大量的结构化数据。在实际应用中,我们经常需要将MySQL数据库中的数据导出到其他地方,如备份数据、数据迁移、数据分析等。下面是使用MySQL
    的头像 发表于 11-21 10:58 377次阅读

    mysql8.0默认字符集是什么

    MySQL 8.0 默认字符集是 utf8mb4。 MySQL 8.0 是当前最新的开源关系型数据库管理系统,由Oracle公司开发和维护。MySQ
    的头像 发表于 11-16 14:48 1100次阅读

    人大金仓三大兼容:MySQL迁移无忧

    近日,MySQL 5.7停服事件引发广泛关注。MySQL目前已经成为中国用户使用非常广泛的数据库,其中5.7版本的用户比重又是最高的。随着信息技术应用创新深入各行各业,国产数据库对
    的头像 发表于 10-31 09:25 317次阅读
    人大金仓三大兼容:<b class='flag-5'>MySQL</b>迁移无忧

    windows环境下mysql的安装

    1 下载并安装MySQL 首先输入如下命令下载Yum Repository,大概25KB的样子 [root @localhost ~ ]# wget - i - c http
    的头像 发表于 10-08 15:29 282次阅读
    windows环境下<b class='flag-5'>mysql</b>的安装

    SQLite和MySQL区别

    SQLite和MySQL区别  SQLite和MySQL是当前使用最普遍的关系型数据库软件,虽然它们都是关系型数据库,但SQLite和MySQL以不同的方式处理数据和执行查询。在使用SQLite
    的头像 发表于 08-28 17:09 2666次阅读

    请问mysql8.0不能在grant时创建用户是什么原因?

    用习惯了MySQL5.7,当在MySQL8.0里创建用户时,习惯性直接敲GRANT指令,结果报错了
    的头像 发表于 08-11 10:16 1036次阅读

    MySQL运维常用脚本

    进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:mysql>
    的头像 发表于 07-29 11:23 390次阅读

    mysql运维实用脚本序列~

    进入MySQL:启动MySQL Command Line Client(MySQL的DOS界面),直接输入安装时的密码即可。此时的提示符是:mysql>
    的头像 发表于 07-16 15:25 662次阅读

    Linux中如何使用Docker安装MySQL

    如果您是 MySQL 的新手或希望快速轻松地安装 MySQL 数据库的人,那么本文适合您,在本文中,我们将学习如何在 Linux 中使用 Docker 和 Docker compose 设置 MySQL。 让我们首先设置
    的头像 发表于 05-12 16:22 3127次阅读
    Linux中如何使用Docker安装<b class='flag-5'>MySQL</b>