MySQL 服务器面临高压力/最大连接数

MySQL 服务器面临高压力/最大连接数

简短: 我们达到了最大连接数,并且发现 MySQL 在高峰营业时段的性能非常差,无法确定这是负载问题还是配置问题。

长篇: 首先,这是我们在 Digital Ocean 上托管的服务器规格:

核心数:20

记忆:

总计已用空闲共享缓存/可用缓存内存:62G 48G 4.7G 216M 10G 14G

MySQL WorkBench 仪表板快照:

MySQL Workbench 仪表板

我们通常在进程列表中有超过 200 个条目,几乎所有条目都是“打开表”、“关闭表”,以及不太常见的“清理”。清理条目有 COMMANDkilledNULLINFO ( SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST)。我们真正看到的唯一花费很长时间的查询是一些对使用频繁的表的 INSERTS,以及在 WHERE 中使用主键的 UPDATE 命令,这些命令用于使用频繁的表。它们的状态在进程列表中为“更新”。

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 多个数据库,成千上万的用户使用一个应用程序频繁发出服务器请求,并进行大量单独的记录更新或插入,需要同步到多个用户。

问题:

考虑到 .cnf 设置和我们的服务器规格,与 MySQL WorkBench 仪表板快照相关,我们是否应该遇到这种配置所见的减速/连接?我们不断达到最大连接数,并SQLSTATE[HY000] [2002] Resource temporarily unavailable从 PDO 中收到 PHP 错误。

有人有什么建议可以提高性能吗?不同的配置设置?我们知道长期解决方案,比如将大型客户端放在单独的服务器上,等等——但就短期而言,有没有什么方法可以优化我们的服务器?我们的应用和网站在高峰时段几乎无法使用。

附加属性:

Linux 4.0.4-301.fc22.x86_64 04/25/2016 _x86_64_ (20 CPU)

平均 CPU:%用户%nice%系统%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

答案1

我的钱花在了“配置”上——但可能与你预期的相反……我怀疑你配置得太多了。

在我看来,你一直在“调整”服务器的性能深入地下

如果您一直在使用“调整”脚本 – 请停止这样做。

例如...table_definition_cache=6000并且table_open_cache=6000...这样做的理由是什么?

您配置的大多数非默认值参数看起来都像是猜测。

除非你进行过基准测试每个这些定制,无论是在您进行定制之前还是之后,您都单独进行定制……好吧,您可能知道我的意思了……它们可能不合理,没有它们您可能会过得更好。更大并不总是更好。更大可能更难兼顾。

如果你只是注释掉,我就会期待好结果几乎全部这些设置除外,innodb_*并让服务器使用更多参数的默认值运行。

相关内容