首页
登录 | 注册

MySQL学习分享 -- MySQL 5.7性能改进

紧随《MySQL学习分享 --机型选择和配置》,虽然没有什么太多的反应和关注,但前进的步伐没有停止。小插曲:电脑被儿子摔坏了,突然感觉失去了方向。忍不住到网吧来看技术文章,似乎有些格格不入,粗鲁嘈杂的声音,并没有影响我的专注和文章质量。

3、 《 MySQL Performance: The Road to 500K QPS with MySQL 5.7

MySQL 5.7 的性能达到另外 50W QPS,看到这样的标题,我惊呆了。虽然是一遍测试文章,细细读来,还是有许多知识可以挖掘。

文中指出, MySQL 5.6RO只读系统下,有很大的提高,而5.7不仅在RO只读系统中,提升较大,对RW读写场景,也有较大的性能提升。 Innodb性能影响主要有MDL trx_syslock_sys 三个,其中 MDL在单表查询时,是主要的瓶颈,单表查询需要对元数据加锁保护,这个毋庸置疑;多表查询时,每个表有 MDL进行保护,更大的瓶颈会落在 trx_syslock_sys 上。一个重要的信息是:当 CPU16 HT 32时,性能反而下降。从以上思路可知,更多的线程处理,反而造成锁冲突和等待。

MySQL 5.7 改进一:自动检测只读事务。对于只读事务来说,如果可以自动检测出来,可以减少 MDL锁开销。同时,文中也提到, percona团队通过改进trx_list锁的方式,提高只读事务的性能。从测试结果可知, MySQL 5.7的自动检测事务的方式,大大地降低了trx_sys锁和lock_sys锁,性能也有明显提升。而 Percona 5.5的优化方案在线程连接数较大时,锁竞争明显,性能也有所下降。此外,在接下来的测试中,发现随着CPU core的增加,性能明显升高,trx_sys锁也明显减少。

MySQL 5.7改进二:基于5.6版本,重写了trx_sys相关的代码。基于RW读写场景下,对RO场景性能影响的动机,重写trx_sys代码,降低事务锁的竞争。从测试场景看,随着CPU core的增加,QPS性能不断增长,最终使得CPU成为性能的瓶颈。

CPU成为瓶颈的条件下,通过努力降低sysbench等工具的CPU资源,继续提高MySQL的性能,最终达到了50WQPS

个人观点:尽管测试场景简单,测试条件单一(Point-Selects),实际应用场景远远复杂的多,但是从MySQL 5.7表现出来的性能来看,非常值得期待。并且MySQL 5.7trx_sys的重写,对RW读写场景也有较大的性能优化,但是仍然需要严格详细的测试。此外,在Innodb年会淘宝交流日中,与Innodb团队交流时,Sunny也表示,MySQL 5.7的改进和优化较大。总之,希望MySQL 5.7不要想5.6那样,让大家一直观望,而是不断推动用户使用。

参考资料

1、《MySQL Performance: The Road to 500K QPS with MySQL 5.7》:http://dimitrik.free.fr/blog/archives/2013/10/mysql-performance-the-road-to-500k-qps-with-mysql-57.html





相关文章

  • 基于<MySQL学习分享--MySQL 5.7性能改进>文中提到的事务锁的优化,MySQL在5.6之前,trx_sys事务锁一直是影响性能的主要因素.在应用中也会经常发现系统资源利用不起来,追查的结果往往是trx_sys事务锁的 ...
  • MySQL学习分享--Thread pool
    刚刚经历了淘宝的双11,真实感受到了紧张的氛围.尽管DB淡定的度过,但是历程中的波折,可谓惊心动魄.其中MySQL在大量连接(万级)的场景下,表现出性能远远低于预期,并且出现明显的波动,成为一个非常重要的问题.问题虽然解决,但是后续的思考和 ...
  • MYSQL企业常用架构与调优经验分享
    一.选择Percona Server.MariaDB还是MYSQL 1.Mysql三种存储引擎 MySQL提供了两种存储引擎:MyISAM和 InnoDB,MySQL4和5使用默认的MyISAM存储引擎.从MYSQL5.5开始,MySQL已 ...
  • 博客文章除注明转载外,均为原创.转载请注明出处. 本文连接地址:http://blog.chinaunix.net/uid-31396856-id-5819025.html DBA很多时间会遇到需要批量处理MySQL服务器的大量连接,比如查 ...
  • 深入理解 MySQL ——锁、事务与并发控制
    目录 2.MySQL 锁 4.隔离级别 6.MySQL 死锁问题 1.MySQL 服务器逻辑架构 每个连接都会在 MySQL 服务端产生一个线程(内部通过线程池管理线程),比如一个 select 语句进入,MySQL 首先会在查询缓存中查找 ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.013 s.
京ICP备10005923号