大幅优化MySQL查询性能的奇技淫巧

2019-01-05 09:49:23于丽

还有什么呢?

我可能只提到:kudos Sunny和整个MySQL的开发团队;

让我们看一下现在选择8张表工作负载的情况下的最大每秒查询。

    MySQL-5.7.2 (DMR2)     MySQL-5.6.14     MySQL-5.5.33     Percona Server 5.6.13-rc60.5     Percona Server 5.5.33-rel31.1     MariaDB-10.0.4     MariaDB-5.5.32

每个引擎都在以下配置下进行测试:

    CPU taskset: 8核-HT,16核,16核-HT,32核,32核-HT     并发会话数:8,16,32 ... 1024     InnoDB自旋等待延时:6,96

最好的结果是来自任意两个特定的组合间的比较。通过对数据库引擎的比较,我得到了下面的一个图表,这个图表我在以前的文章中已经提到过了。

2015625110054565.png (720×248)

面是一些评论:

    对Mysql5.7的巨大差距结果不需要做过多的评论,因为这是很明显的。     那么,有趣的是基于MySQL5.5的代码库引擎没有任何的接近MySQL5.6的结果。     这已经证实了在使用MySQL5.6的代码库引擎之后,Percona Server达到了MySQL5.6的水平,然而MariaDB-10仍然还在探索的路上。     因此,毫无疑问,MySQL5.6是代码的基石!     MySQL5.7是在MySQL5.6基础上的再一次优化扩展。

具有什么样的扩展性呢?

2015625110113878.png (720×248)

 答案是简单的:MySQL5.7是唯一在此基础上进行扩展的。

如果使用ip端口和一个重量级的Sysbench-0.4.13,会得到如下的结果:

2015625110135850.png (720×248)

QPS只是稍微的略低一点,但是总体的趋势是完全一样的。

可扩展性也是非常的相似:

2015625110203829.png (720×248)

注意:对一个单表绑定过多的工作负载是不好的:

    减少InnoDB间的争论使得其他的争论更加的明显。     当负载是绑定在一张单表上时候,MDL的争论将变得更加主导。     这是预期希望的,我们在下一个DMRS上将保持不变。

还有很多挑战摆在我们面前;-)
作为参考,我上述测试的硬件配置信息如下:

    Server : 32cores-HT (bi-thread) Intel 2300Mhz, 128GB RAM     OS : Oracle Linux 6.2     FS : 启用"noatime,nodiratime,nobarrier"挂载的EXT4


my.conf: