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 提供一些非常有用的性能诊断工具。 上述两项使用后,测试结果如下:
使用ProxySQL时,在很少线程数量时就有天花板(图中红线低于正常MySQL的吞吐量),但是200个线程以后它能保持稳定的吞吐量。 而使用Percona Server线程池,线程数量少于线程池数量时一点没有没有损耗,几乎与正常MySQL差不多,而在200线程以后,它的吞吐量会落后于ProxySQL。 下面是响应时间对比图:
建议:
|