我有一个应用程序的扩展问题,它使用 Aurora 作为数据库并使用 Slick 作为 ORM。我不确定问题出在哪里,但我有一个与 MySQL / Aurora 相关的问题,希望能对我的问题有所了解。
应用程序需要池中的大量连接,否则应用程序开始失败。但是,当我查看 INFORMATION_SCHEMA.PROCESSLIST 时,我可以看到大量线程处于“已清理”状态。
我在一般状态列表中看不到“已清理” - https://dev.mysql.com/doc/refman/5.7/en/general-thread-states.html
“清理干净”到底是什么意思?(我可以猜到,但我找不到任何文档)
下面是线程总数与“清理”中的数量的计数
mysql> select count(*) from INFORMATION_SCHEMA.PROCESSLIST where STATE = 'cleaned up' order by time desc ;
+----------+
| count(*) |
+----------+
| 11982 |
+----------+
1 row in set (0.08 sec)
mysql> select count(*) from INFORMATION_SCHEMA.PROCESSLIST order by time desc ;
+----------+
| count(*) |
+----------+
| 12007 |
+----------+
1 row in set (0.08 sec)
终于找到了答案,它是一个 Aurora 特定的状态,与 MySQL 中的空白状态含义相同。
Cleaned Up 状态意味着它已经完成并清理并等待连接关闭。
https://forums.aws.amazon.com/thread.jspa?messageID=708499
(不是答案,而是行动方案……)
的价值是
max_connections
多少?听起来它非常大。这是一个非常罕见的系统,该设置需要超过 1000 个。所以.. 将设置 (in
my.cnf
) 降低到 500 并重新启动 mysqld。这将解决将其推送回客户端的问题,然后客户端将抱怨它无法连接到服务器。那么,那么,……弄清楚为什么有这么多客户要求数据库活动。
并且,找出哪些查询太慢以至于无法快速进出。它可能就像缺少复合索引一样简单。