设为首页 - 加入收藏 桂林站长网 (http://www.0773zz.com)- 国内知名站长资讯网站,提供最新最全的站长资讯,创业经验,网站建设等!
热搜: wifi 升级 芯片 专业
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MySQL最新版8.0与5.7之性能对比

发布时间:2019-09-25 19:16 所属栏目:[MySql教程] 来源:码云的三弟码农
导读:简述 在Oracle MySQL团队的推动下,MySQL 8.0发生了巨大的变化和修改。 物理文件已更改。例如,*.frm,* .TRG,*.TRN和* .par 不再存在。添加了大量的新特性,如通用表表达式(Common Table Expressions CTE),窗口函数(Window Functions),不可见索引(

简述

在Oracle MySQL团队的推动下,MySQL 8.0发生了巨大的变化和修改。

物理文件已更改。例如,*.frm,* .TRG,*.TRN和* .par 不再存在。添加了大量的新特性,如通用表表达式(Common Table Expressions CTE),窗口函数(Window Functions),不可见索引( Invisible Indexes),正则表达式(regexp) -MySQL8.0现在已经完全支持Unicode,且具有多字节安全特性。数据字典也发生了变化。它现在与一个事务性数据字典合并,该字典存储有关数据库对象的信息。与以前的版本不同,字典数据存储在元数据文件和非事务表中。

安全性得到了改进,caching_sha2_password认证方式取代了之前的mysql_native_password认证方式,成为默认的身份验证方式。它提供了更强大的灵活性,而且也加强了安全性,即它要求必须使用安全连接或通过RSA密钥对实现的支持密码交换的未加密链接。

本篇暂不讨论其新特性,而是将其性能与MySQL 5.7进行对比,看看它是如何改进的。

Server Setup and Environment服务器设置和环境

对于此基准测试,我打算使用基于AWS EC2最小配置的系统环境:

  • 实例类型:t2.xlarge实例
  • 存储:gp2(SSD存储,最小100 IOPS,最大16000 IOPS)
  • 虚拟CPU:4
  • 内存:16GiB
  • MySQL5.7版本:MySQLCommunity Server (GPL) 5.7.24
  • MySQL8.0版本:MySQLCommunity Server - GPL 8.0.14

在这个基准测试中,我也针对一些参数项的取值进行了配置,它们是:

  • innodb_max_dirty_pages_pct= 90 ##这是MySQL 8.0中的默认值。
  • innodb_max_dirty_pages_pct_lwm= 10 ##这是MySQL 8.0中的默认值
  • innodb_flush_neighbors=0
  • innodb_buffer_pool_instances=8
  • innodb_buffer_pool_size=8GiB

这里对两个版本(MySQL 5.7和MySQL 8.0)其余参数项的配置是参照ClusterControl的my.cnf模板进行调优。

此外,我在这里不使用MySQL8.0的新身份验证方式,即caching_sha2_password认证方式。替代的是在这两个版本中都使用mysql_native_password,外加配置innodb_dedicated_serve=OFF(默认值),因为innodb_dedicated_serve是MySQL 8.0的新特性。

为了简化工作,我使用ClusterControl配置MySQL 5.7 Community version节点,然后把该节点从集群中的剔除,使其成为一个单独主机,并关闭集群控制主机,使MySQL 5.7节点处于休眠状态(不监控流量)。从技术上讲,MySQL 5.7和MySQL8.0都是休眠节点,在节点上没有活动连接通,因此它基本上是一个纯粹的基准测试。

Commands and Scripts Used使用的命令和脚本

对于此任务,sysbench用于测试和负载模拟这两个环境。以下测试中使用的命令和脚本:

  • ?
  1. sb-prepare.sh?
  2. ?#!/bin/bash??
  3. host=$1#host192.168.10.110port=3306user='sysbench'password='MysqP@55w0rd'table_size=500000rate=20ps_mode='disable'sysbench/usr/share/sysbench/oltp_read_write.lua?--db-driver=mysql?--threads=1--max-requests=0?--time=3600?--mysql-host=$host?--mysql-user=$user--mysql-password=$password?--mysql-port=$port?--tables=10?--report-interval=1--skip-trx=on?--table-size=$table_size?--rate=$rate?--db-ps-mode=$ps_modeprepare?

sb-run.sh

  • ?
  1. #!/usr/bin/envbash2??
  2. host=$1port=3306user="sysbench"password="MysqP@55w0rd"table_size=100000tables=10rate=20ps_mode='disable'threads=1events=0time=5trx=100path=$PWD?
  3. ?counter=1?
  4. ??
  5. echo?"thread,cpu"?>${host}-cpu.csv??
  6. for?i?in?16?32?64?128?256?512?1024?2048;??
  7. do?
  8. ?threads=$i?
  9. ?mysql?-h?$host?-e"SHOW?GLOBAL?STATUS"?>>?$host-global-status.logtmpfile=$path/${host}-tmp${threads}touch?$tmpfile/bin/bashcpu-checker.sh?$tmpfile?$host?$threads?&?
  10. ??
  11. /usr/share/sysbench/oltp_read_write.lua--db-driver=mysql?--events=$events?--threads=$threads?--time=$time--mysql-host=$host?--mysql-user=$user?--mysql-password=$password--mysql-port=$port?--report-interval=1?--skip-trx=on?--tables=$tables--table-size=$table_size?--rate=$rate?--delete_inserts=$trx?--order_ranges=$trx--range_selects=on?--range-size=$trx?--simple_ranges=$trx?--db-ps-mode=$ps_mode--mysql-ignore-errors=all?run?|?tee?-a?$host-sysbench.log?
  12. ??
  13. echo"${i},"`cat?${tmpfile}?|?sort?-nr?|?head?-1`?>>?${host}-cpu.csv?
  14. unlink?${tmpfile}?
  15. ?mysql?-h?$host?-e"SHOW?GLOBAL?STATUS"?>>?$host-global-status.log?
  16. done?
  17. ??
  18. python?$path/innodb-ops-parser.py?$host?
  19. ?mysql?-h?$host?-e?"SHOW?GLOBALVARIABLES"?>>?$host-global-vars.log?

因此,脚本只是准备sbtestschema并填充表和记录。然后,它使用

/usr/share/sysbench/oltp_read_write.lua脚本执行读/写负载测试。该脚本转储全局状态和MySQL变量,收集CPU利用率,并解析由脚本innodb-ops-parser.py处理的InnoDB行操作。脚本根据基准测试期间收集的转储日志生成* .csv文件,我在这里使用Excel电子表格从* .csv文件生成图表。请检查 github中提交的代码。

现在,让我们继续处理图表结果!

【免责声明】本站内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

网友评论
推荐文章