为评估MySQL从5.6.21升级到5.7.23版本的性能,针对分区表的读写做了对比测试。

【测试环境】

1、 两台HP380的物理机,配置一致,CPU:Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz,内存:128G,磁盘:2*300G,10K(1) 8*900G,10K(10)

2、测试实例还原了生产集群的实例,测试分区表记录数约3800万

3、采用生产真实样本SQL语句,模拟并发线程16、32、64、128、256情况下,对比SQL执行1000万次的QPS和TPS性能。

4、MySQL的配置为各自版本的上线标准配置

【测试结论】

1、 分区表在只读情况下,MySQL 5.7的性能略低于5.6的性能,约在15%左右,但随着并发线程数的增加,MySQL5.7的性能接逐渐近于5.6的性能

为什么MySQL5.7分区表的查询性能会有下降,后面我再进一步分析。

2、 分区表在只写情况下,MySQL 5.7的性能明显好于5.6的性能,性能提升在40%以上,随着并发线程数的增加,MySQL5.7的性能比较稳定,但5.6的性能开始逐步下降

这个差异可能与5.7的配置参数调整有关,

innodb_io_capacity=1000

innodb_read_io_threads=8

innodb_write_io_threads=8

3、 分区表在混合读写(读写比例约1:1)情况下,MySQL 5.7的性能明显好于5.6的性能,性能提升在30%以上,随着并发线程数的增加,MySQL5.7的性能比较稳定,但5.6的性能开始逐步下降

【进一步分析】

分区表在只读场景,并发线程不高的情况下,MySQL 5.7的性能略低于5.6的性能。下面从一些维度对比了两个版本下相同查询SQL的执行性能。

【两个版本差异的补充说明】

 

1、external_lock不同,按照文档上的说明计算,5.7分区锁定数为0,5.6分区锁定数为11

Handler_external_lock

The server increments this variable for each call to its external_lock() function, which generally occurs at the beginning and end of access to a table instance. There might be differences among storage engines. This variable can be used, for example, to discover for a statement that accesses a partitioned table how many partitions were pruned before locking occurred: Check how much the counter increased for the statement, subtract 2 (2 calls for the table itself), then divide by 2 to get the number of partitions locked.

2、执行计划显示不同,在符合的分区partitions,优化器预估的记录条数rows,根据条件过滤到的记录百分比filtered,格外信息extra四个字段不一致

MySQL5.7

id: 1

select_type: SIMPLE

partitions: p20190223,p20190224,p20190225,p20190226,p20190227,pMax

type: ref

key_len: 610

ref: const,const

rows: 1

filtered: 100.00

Extra: NULL

MySQL5.6

id: 1

select_type: SIMPLE

type: ref

key_len: 610

ref: const,const

rows: 12

Extra: Using where

执行计划中partitions和filtered的差异,是由于explain命令默认选项不同造成的。

在5.7以前的版本中,想要显示partitions需要使用explain partitions命令;要显示filtered需要使用explain extended命令。在5.7版本后,默认explain直接显示partitions和filtered中的信息。

3、16并发线程压测平均CPU使用率(usr%),MySQL5.7在QPS小于MySQL5.6的情况下,用户CPU使用率却高于5.6

4、CPU高消耗的函数调用栈不同,主要差异在于MySQL5.7.23在execute_sqlcom_select函数中调用handle_query,而MySQL5.6.21为handle_select,代码本身逻辑做了修改。

MySQL5.7

MySQL5.6

数据库运维经验分享&MySQL源码学习漫漫路

MySQL5.7.23 VS MySQL5.6.21 分区表性能对比测试的更多相关文章

  1. CentOS7安装mysql5.6.23

    ============安装glibc版本============== 一.下载glibc版本的Mysql mysql-advanced-5.6.23-linux-glibc2.5-x86_64.zi ...

  2. CentOS7安装mysql5.6.23 -(转)

    一.下载glibc版本的Mysql mysql-advanced-5.6.23-linux-glibc2.5-x86_64.zip 解压后,得到 mysql-advanced-5.6.23-linux ...

  3. CentOS 7下升级MySQL5.7.23的一个坑

    发现CentOS 7下升级MySQL5.7.23的一个坑,以前面升级到MySQL 5.7.23的一个集群为例 在我们环境下打开文件描述符个数的参数open_files_limit在MySQL 5.6. ...

  4. 学以致用二十七-----Centos7.5二进制安装mysql5.7.23

    首先去官网查看mysql版本.才一个礼拜不到,我之前下载的是mysql5.7.23,现在在官网页面已然找不到了,只有5.7.24版本,不得不说更新真快.不过我下载的是mysql5.7.23,所以还是安 ...

  5. CentOS 7下MySQL5.7.23的服务配置参数测试

    CentOS 7默认安装MySQL5.7.23,服务管理发生了变化,从sysvinit(service mysql start)变化为systemd(systemctl start mysqld.se ...

  6. Windows安装MySQL5.7.23 zip包

    工欲善必先利其器 # 环境: Win7旗舰版 + MySQL5.7.23 # 用到的命令: mysqld --initialize -- 初识化 mysqld --install -- 添加到Wind ...

  7. Ubuntu16.04Server版离线安装Nginx1.8.1+Mysql5.7.23+Python3.6.2

    nginx1.8.1 1.安装前准备工作 1.1.检查系统版本,确认源码编译所依赖的环境,提前下载好压缩包. 整个环境都是使用root权限安装,系统版本为server版的ubuntu16.04.4 r ...

  8. CentOS6.5_64bit下编译安装MySQL-5.6.23

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/44785511 ************************************** ...

  9. centos6.5环境通达OA数据库mysql5.0.67升级至mysql5.5.48方案

    centos6.5环境通达OA数据库mysql5.0.67升级至mysql5.5.42方案 整体方案: 环境准备,在备用服务器安装mysql5.5数据库 1.停用生产环境的应用访问 直接修改web的访 ...

随机推荐

  1. 【Linux】基本命令操作

    一.用户操作 1.新增用户 useradd -u 1101 -g zte -d /home/xhs -m xhs --其中,1101,为用户ID,尽量使用500以上的 zte,为用户组 /home/x ...

  2. RemoveDuplicatesfromSortedList

    给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次. 示例 1: 输入: 1->1->2 输出: 1->2 示例 2: 输入: 1->1->2->3-&g ...

  3. javaScript遍历对象、数组总结

        javaScript遍历对象总结 1.使用Object.keys()遍历 返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含Symbol属性). var obj = {'0':'a ...

  4. Java 并发类

    java.util.concurrent包里 提供了一批线程安全的类 一. java.util.concurrent.atomic java.util.concurrent.atomic包里的原子处理 ...

  5. 编辑方法分享之如何编辑PDF文件内容

    我们现在在工作中会经常使用到PDF文件,还会有遇到需要编辑PDF文件的时候,PDF文件的编辑问题一直是个大难题.很多朋友在面对PDF文件的时候束手无策,不知道该怎么对它进行编辑.下面小编就教给大家一个 ...

  6. 纯CSS3超酷3D旋转立方体动画特效

    简要教程 这是一款神奇的纯 CSS3 立方体动画特效插件.使用CSS3来制作动画效果已经成为WEB前端开发的一种时尚,从简单的颜色和尺寸动画,到复杂的旋转.翻转动画, CSS3 展现了它无穷的魅力.使 ...

  7. linux里面的命令:./和. /(这里有空格)的区别

    /  ( 直接/ ) 直接 / 表示: 根目录. ./ ( 点号紧跟/ ) 点号紧跟/ 表示: 当前目录(相对路径的写法). . / ( 点号 空格 / ) 有空格的点号等同于source命令,表示在 ...

  8. C#enum使用Attribute求字段名

    用到了一些反射:(自己看吧) public enum UserState { /// <summary> /// 正常 /// </summary> [Remark(" ...

  9. Android常用框架和控件使用

    Router框架 https://github.com/iqiyi/Andromeda/blob/master/CHINESE_README.md https://github.com/alibaba ...

  10. Exception in thread "main" java.lang.NullPointerException

    1.在window操作系统上,使用eclipse开发工具从hdfs分布式文件系统上下载文件报空指针异常解决方法: log4j:WARN No appenders could be found for ...