点击上方蓝色“方志朋”,选择“设为星标”

回复“666”获取独家整理的学习资料!

背景

测试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_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

mysql8.0.15

8.0.15
innodb_buffer_pool_size 128M
innodb_log_buffer_size  64M
innodb_log_file_size    48M
binlog_format   ROW
log_bin ON
transaction_isolation   REPEATABLE-READ

系统平台

sysbench -V
sysbench 1.1.0 (using bundled LuaJIT 2.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模式下

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('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模式下

SHOW GLOBAL  VARIABLES WHERE Variable_name IN('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:288: 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()失败

使用脚本

 cat sysbench_test_mysql5.7_8.0_tps_qps.sh
#!/bin/bash
#用于sysbench 测试在读写模式、只读模式、只写模式下 mysql5.7和mysql8.0 的tps,qps
#nohup bash $0 >/tmp/sysbench_test 2>& 1 &
#user=admin
passwd=admin
ports="8015 57222"
host=127.0.0.1
sysbench_test_mode="oltp_read_write oltp_read_only oltp_write_only"
sysbench_test_info_path=/tmp/sysbench-testfunction red_echo () {local what="$*"echo -e "$(date +%F-%T) \e[1;31m ${what} \e[0m"
}function check_las_comm(){if [ $1 -ne 0 ];thenred_echo $2exit 1fi
}function  restart_mysqld(){service mysqld${1} restartsleep 2
}function  purge_binlog(){
port=$1
mysql -u$user -p$passwd -P$port -h$host<<EOF
purge binary logs before now();
EOF
}function clean_os_cache(){echo 3 > /proc/sys/vm/drop_caches
}function  sysbench_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}function  main(){
for test_mode in $sysbench_test_mode;dofor port in $ports;dofor thread_num in {5,10,20,30,40,80,120,200};dorestart_mysqld "$port"check_las_comm  "$?" "restart mysqld${port} failed "clean_os_cachepurge_binlog "$port"red_echo "sysbench $thread_num  threads cleanup mysqld${port}"sysbench_with_diff_thread "$thread_num" "$port" "cleanup" "$test_mode">/dev/nullred_echo "sysbench $thread_num  threads prepare mysqld${port}"sysbench_with_diff_thread "$thread_num" "$port" "prepare" "$test_mode">/dev/nullmkdir -p $sysbench_test_info_pathred_echo "sysbench $thread_num  threads run mysqld${port} $test_mode"sysbench_with_diff_thread "$thread_num" "$port" "run" "$test_mode" > $sysbench_test_info_path/${test_mode}_${thread_num}_$port# service mysqld{port} stopdonedone
done}main
热门内容:
  • SpringBoot开发微信公众号

  • 拒绝接口裸奔!开放API接口签名验证!

  • 笑了,面试官问我知不知道异步编程的Future。

最近面试BAT,整理一份面试资料《Java面试BAT通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。获取方式:点“在看”,关注公众号并回复 666 领取,更多内容陆续奉上。
明天见(。・ω・。)ノ♡

MySQL 5.7 vs 8.0,哪个性能更牛?相关推荐

  1. mysql5.7与8.0用那个_MySQL 5.7 vs 8.0,哪个性能更牛?

    背景 测试mysql5.7和mysql8.0 分别在读写.只读.只写模式下不同并发时的性能(tps,qps) 前提测试使用版本为mysql5.7.22和mysql8.0.15 sysbench测试前先 ...

  2. mysql8.0与mysql7.0_MySQL 5.7 vs 8.0,哪个性能更牛?

    测试mysql5.7和mysql8.0分别在读写,选定,只写模式下不同并发时的性能(tps,qps) 最早测试使用版本为mysql5.7.22和mysql8.0.15 sysbench测试前先重启my ...

  3. Java中常用的4个Json库,哪个性能更牛逼?

    来源:http://u6.gg/sDMab 前言 每次都在网上看到别人说什么某某库性能是如何如何的好,碾压其他的库.但是百闻不如一见,只有自己亲手测试过的才是最值得相信的,本篇通过JMH来测试一下Ja ...

  4. 苹果a10处理器_苹果A10 VS 安卓旗舰 谁性能更牛?

    国内手机厂商开发布会的经典套路就是"碰瓷苹果",媒体的评测文章也经常会爆出"秒杀iPhone.iPhone吓尿了"之类的字眼.那么采用不同芯片方案的旗舰手机,在 ...

  5. mysql 5.7和8.0区别_前沿观察 | MySQL性能基准测试对比:5.7 VS 8.0

    点小蓝字加关注! 版权声明:本文由腾讯云数据库产品团队整理,页面原始内容来自于severalnines英文官网,若转载请注明出处.翻译目的在于传递更多全球最新数据库领域相关信息,并不意味着腾讯云数据库 ...

  6. mariadb mysql 5.6_MySQL 5.6 和 MariaDB-10.0 的性能比较测试

    Oracle 刚刚发布了 MySQL 5.6.10 GA 版本,所以是时候更新下之前的性能测试数据了,此次的测试包括以下几个版本: MySQL-5.5.29 MySQL-5.6.10 MariaDB- ...

  7. MySQL 8.0复制性能的提升(翻译)

    What's New With MySQL Replication in MySQL 8.0 MySQL复制从问世到现在已经经历了多个年头,它的稳定性和可靠性也在稳步的提高.这是一个不停进化的过程,由 ...

  8. MySQL 高可用架构 之 MHA (Centos 7.5 MySQL 5.7.18 MHA 0.58)

    目录 简介 环境准备 秘钥互信 安装基础依赖包 安装MHA组件 安装 MHA Node组件 安装 MHA Manager 组件 建立 MySQL 一主三从 初始化 MySQL 启动MySQL 并简单配 ...

  9. MySQL DBA必备:MySQL 5.7升级8.0过程(全)

    墨墨导读:每个 DBA 在工作中都会面临数据库升级的问题,本文详细介绍MySQL 从 5.7 升级到 8.0 的过程,希望可以帮助到大家. 为什么升级到MySQL 8.0 基于安全考虑 基于性能和 稳 ...

最新文章

  1. 【代码笔记】iOS-浮动的云
  2. Jpa规范原始编程步骤
  3. 物联网已死,API 万岁!
  4. CentOS软件包管理之RPM
  5. 收到控制台警告:当我在iOS13.2中加载WKWebView时,[Process] kill() returned unexpected error 1
  6. 江苏图采上传自定义证件照
  7. 云流送技术可以支持多人交互吗?
  8. maven自定骨架创建流程
  9. Android Studio如何创建VR项目。
  10. 孙鑫《VC++深入详解》完整版PDF 下载
  11. [Python深度学习入门]实战一·Numpy梯度下降求最小值
  12. 有秒计时的数字时钟(10分)
  13. av_find_best_stream
  14. setsockopt和getsockopt函数详解
  15. 【操作系统①】——操作系统的定义和功能、操作系统的四大特征【并发 共享 虚拟 异步】
  16. 对APISIX相关组件,插件的理解说明
  17. 栅格地图中自由区域之Bresenham算法及个人搜索算法对比
  18. java 发送Bearer token请求
  19. Unity数据持久化——Json
  20. 一、用Python从零实现横向联邦图像分类

热门文章

  1. python day two,while
  2. 第二章、IP协议详解
  3. Hadoop学习笔记(1) ——菜鸟入门
  4. c++运算符重载总结
  5. 程序员眼中的英文单词是这样的
  6. LeetCode实战:二叉树的最大深度
  7. 【POJ】3617 Best Cow Line (字典序 字符串)
  8. html在线缓存视频,javascript – 如何为HTML视频添加缓冲
  9. 冬奥会夺金的背后杀手锏,竟是位 AI 虚拟教练
  10. 坐地铁就能学会的3种非常有趣的 Python 玩法