简而言之:在高峰营业时间,我们正在接触最大的连接并看到MySQL的性能很差,无法确定是负载问题还是configuration问题。
Long:首先,这是我们在Digital Ocean上托pipe的服务器规范:
核心:20
记忆:
总共使用免费共享缓冲/caching可用Mem:62G 48G 4.7G 216M 10G 14G
MySQL WorkBench仪表板快照:
MySQL工作台仪表板
我们通常在stream程列表中有超过200个条目,几乎所有的条目都是“打开表格”,“closures表格”以及“稍微清理一下”。 清理条目有COMMAND killed和NULL INFO( SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST )。 我们真正看到的只有很长的一些查询是大量使用表中的一些INSERT,并且在WHERE中用主键UPDATE命令来处理沉重的表。 他们的状态是在stream程列表中的“更新”。
MySQL .cnf设置:
key_buffer_size=1G myisam_sort_buffer_size=1073741824 max_length_for_sort_data=8388608 max_sort_length=8388608 sort_buffer_size=1073741824 join_buffer_size=1073741824 preload_buffer_size=1073741824 read_buffer_size=1073741824 read_rnd_buffer_size=1073741824 thread_cache_size=450 max_allowed_packet=100M max_connections=400 lock_wait_timeout=50 wait_timeout=120 table_open_cache_instances=10 table_open_cache=6000 table_definition_cache=6000 innodb_flush_method=O_DIRECT innodb_buffer_pool_size=46G innodb_buffer_pool_instances=46
我们在单个实时服务器上有超过800个数据库,并且有成千上万的用户使用一个应用程序来频繁发出服务器请求,其中有大量单独的logging更新或需要同步到多个用户的插入。
问题:
鉴于.cnf设置和我们的服务器规格,就MySQL WorkBench仪表板快照而言,我们是否应该体验到这种configuration下的减速/连接? 我们经常打我们的最大连接,并从PDO获取PHP中的SQLSTATE[HY000] [2002] Resource temporarily unavailable错误。
有没有人有任何改善性能的build议? 不同的configuration设置? 我们知道长期的解决scheme,比如把大客户放在不同的服务器上,但是在短期内,有什么办法可以优化我们的服务器? 我们的应用程序和网站在繁忙时间几乎不可用。
附加统计:
Linux 4.0.4-301.fc22.x86_64 04/25/2016 _x86_64_(20 CPU)
avg-cpu:%user%nice%system%iowait%steal%idle
8.51 0.01 0.67 0.28 0.35 90.18
设备:tps kB_read / s kB_wrtn / s kB_read kB_wrtn vda
269.78 1681.90 2180.52 37679232421 48849706700
我的钱是在“configuration” – 但可能是以相反的方式,你预计…我怀疑你已经configuration了太多。
它看起来好像你一直在“调整”你的服务器的性能。
如果你一直在使用“调整”脚本 – 停止这样做。
例如… table_definition_cache=6000和table_open_cache=6000 …这是什么理由?
大部分你configuration的参数远离他们的默认值似乎是猜测。
除非你单独地在你做出这些定制之前和之后对每一个定制进行基准testing,那么你可能会看到我要去的地方…他们可能是没有道理的,如果没有他们,你可能会变得更好。 更大并不总是更好。 更大可以更难以玩弄。
如果只是简单地将除innodb_*之外的所有这些设置innodb_*并让服务器以更多的参数运行默认值,我会期待好的事情。