我的 aws 设置中有一个 db.m5.large RDS 实例正在运行。当我从 mysql 控制台检查最大连接数时,使用以下查询。
mysql> show variables like 'max_connections';
+-----------------+-------+
| Variable_name | Value |
+-----------------+-------+
| max_connections | 624 |
+-----------------+-------+
因此我假设它可以处理 624 个连接。
当我使用下面的查询检查最大使用连接数时。
mysql> SHOW STATUS WHERE `variable_name` = 'Max_used_connections';
+----------------------+-------+
| Variable_name | Value |
+----------------------+-------+
| Max_used_connections | 99 |
+----------------------+-------+
我假设有 99 个活动连接,其余的是空闲的。
但是,我的 AWS 警报系统和 RDS 监控系统显示它占用了 90 多个数据库连接。但与此同时我的 RDS CPU 消耗只有 8%。这个警报/监控只是数字还是平均最大连接数?
我有点担心这一点,我的服务器可能会在一段时间后达到最大连接数(100)后停止。
有人能告诉/解释一下吗
- 如何检查实际可用的最大连接数和当前连接数。
- 度量指标是什么意思?(仅当前连接数还是平均连接数?)
- 该如何克服这个问题?
- 如果我想增加最大连接数,我该怎么做?
- 我是否需要减少应用程序端的连接?
答案1
max_connections = 624
说会允许那么多连接。它可能无法同时处理那么多连接。
Max_used_connections = 99
意思是有些时候自启动以来,共有 99 个连接。但是,它们可能一直处于空闲状态,等待应用程序(或用户)发出查询。
Threads_running
是当前实际正在执行某项操作的连接数的瞬时计数。几十个连接数对此来说是一个“高”数字。但是,这是一个短暂的计数,因此监视它带来的干扰大于实用性。
运行良好的 MySQL 服务器将仅使用 8% 的 CPU(或远低于 100% 的数字)。
一般来说,你应该尝试减少来自应用程序端的连接。这可以通过以下方式实现
- 让应用程序在完成后断开连接
- 较低
wait_timeout
——用于引导无法断开的连接。 - 减少
max_connections
——但幅度相当大 - 减少应用程序启动的“线程”数量(或其他)。例如,这可以在 Apache 中配置。
您提出的各种指标都不是“可操作的”,所以我不会尝试编造如何衡量它们。
如果你的应用运行缓慢,那是查看的线索。slowlog 是我的“首选”位置 —— 它不仅指出存在问题,还指出哪个查询是“最差的”(在使用一些摘要之后)。
如果你想回顾数百个VARIABLES
,GLOBAL STATUS
请参阅这我需要的信息。大约有 200潜在的它寻找的危险信号。