使用proxysql和线程池扩展MySQL性能

  MySQL 5.7的读写workload并不能带来高吞吐量(按这里见测试结果),Oracle官方推荐使用一种黑色魔术,使用innodb_thread_concurrency 和 innodb_spin_wait_delay两个参数,但是并不总是有效,这里介绍使用proxysql和线程池两种方案拓展MySQL性能。

  ProxySQL是个高性能代理,ProxySQL 能将MySQL的连接限制在200个,ProxySQL 有能力多路复用数据库连接,使用这种设置,即使有1000个连接,它也会只维持MySQL的200个连接,其实也是数据库线程连接池原理。

  Percona Server提升了MYSQL在高负载情况下的 InnoDB 的性能、为 DBA 提供一些非常有用的性能诊断工具。

上述两项使用后,测试结果如下:

mysql性能测试

使用ProxySQL时,在很少线程数量时就有天花板(图中红线低于正常MySQL的吞吐量),但是200个线程以后它能保持稳定的吞吐量。

而使用Percona Server线程池,线程数量少于线程池数量时一点没有没有损耗,几乎与正常MySQL差不多,而在200线程以后,它的吞吐量会落后于ProxySQL。

下面是响应时间对比图:

MySQL优化性能对比

建议:

  • 如果你计划使用ProxySQL, 你也许可以使用它防止MySQL达到饱和。
  • 如果你使用Percona Server, 你也许需要考虑调整线程池

 

数据库专题

性能专题

伸缩性