我有一个配置好的、单主的RDS (5.6.mysql_aurora.1.23.0),它有一个作者和一个阅读器.客户端是一组具有多达250个连接池的jetty应用程序。
一段时间以来,我一直在与间歇性问题作斗争:连接记录开始超时,主要是。它似乎与高负载相关,并且我已经开始定期地将整个information_schema.processlist
复制到日志表中(显然是带有时间戳),而且当连接数达到2000时,问题似乎变得最明显。它永远不会接近max_connections
或max_user_connections
:
mysql> show variables like "%max%conn%";
+------------------------------+-------+
| Variable_name | Value |
+------------------------------+-------+
| aurora_max_connections_limit | 16000 |
| max_connect_errors | 100 |
| max_connections | 3000 |
| max_user_connections | 0 |
+------------------------------+-------+
4 rows in set (0.03 sec)
那么,为了克服这个问题,我应该集中注意哪些参数呢?我还没有发现任何可能出现的情况,这就解释了为什么2000次连接似乎导致了这种情况;当然,这样一个整数出现可能只是巧合。
发布于 2021-05-28 12:06:14
这很可能是内存耗尽的结果。到数据库的每个连接都需要一些内存,如果每个连接都需要1MB (一个较低的数目),您可以查看仅用于连接的大约2GB内存。
此SQL查询将使您知道任何单个连接可以使用的最大内存量:
SELECT ( @@read_buffer_size
+ @@read_rnd_buffer_size
+ @@sort_buffer_size
+ @@join_buffer_size
+ @@binlog_cache_size
+ @@thread_stack
+ @@tmp_table_size
+ 2*@@net_buffer_length
) / (1024 * 1024) AS MEMORY_PER_CON_MB;
检查这个数字是否太高(这是一个主观数字,根据您对特定数据库的经验)。如果数据库的内存经常耗尽,那么您可能需要一个内存优化实例,或者对每个连接消耗多少资源进行更严格的限制。
https://dba.stackexchange.com/questions/292411
复制相似问题