背景
测试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/dev/null red_echosysbench$thread_numthreadspreparemysqld${port} sysbench_with_diff_thread$thread_num$portprepare$test_mode>/dev/null mkdir-p$sysbench_test_info_path red_echosysbench$thread_numthreadsrunmysqld${port}$test_mode sysbench_with_diff_thread$thread_num$portrun$test_mode>$sysbench_test_info_path/${test_mode}_${thread_num}_$port #servicemysqld{port}stop done done done } main
原文标题:mysql 5.7 & mysql 8.0 性能对比
文章出处:【微信公众号:数据分析与开发】欢迎添加关注!文章转载请注明出处。
城市內涝道路积水监测整体解决方案
热电偶是什么
Wind River与Cavium合作推出OCTEON系列多
射频中的旁路与去耦设计时注意的要点
荣耀9评测:华为荣耀9正式发布,性能媲美荣耀V9,外观美过荣耀8,价格还低于小米6,性价比神机,必须买买买
MySQL 5.7与MySQL 8.0 性能对比
学会使用tmpfs文件系统来提速你的linux系统
车载转换器与马达控制MCU应用指南
LPC1768开发板的特性及USB通信应用方案的研究
手持农业气象环境监测仪组成以及功能有哪些?
小米6强势来袭,华为P10被逼降价
智慧城管成为推动城市治理体系和能力现代化的必由之路
贴片三极管引脚 三极管的识别分类和测量
荣耀20S评测 荣耀20的小幅精简版
2019年真的会成为MEMS激光雷达技术路线元年吗?
无线接入过程的三个阶段
马斯克:今年将初步进行脑机接口人体试验
如何隔离电磁波
华为荣耀v9和荣耀9配置区别对比,华为荣耀v9和荣耀9你会选谁?
FlashDB在运行期间,如果发现存在坏块flash会进行隔离处理吗?