MySQL 的 max_connections 默认值通常是 151(不同版本和安装方式可能有差异),但正常值并没有一个固定的标准,它完全取决于你的系统硬件配置、业务并发量以及数据库使用模式。
一个健康的 max_connections 设置,通常基于以下三个维度的考量:
服务器的 CPU、内存和 IOPS 决定了它能承载的连接上限。每个连接即使空闲,也会占用约几 MB 的内存(用于排序缓冲区、连接缓冲区等)。
低配置服务器(2核4G):建议设置在 200-500。
中配置服务器(8核16G):建议设置在 500-1000。
高配置服务器(32核64G+):可以设置在 1000-3000,甚至更高(取决于具体业务)。
并发连接数:指的是同一时刻需要执行 SQL 的线程数,而不是总连接数。通常 Threads_running(正在执行的线程)远小于 Threads_connected(已连接的线程)。
计算公式参考:如果你的应用使用了连接池,max_connections 通常需要设置为所有应用服务器连接池大小之和,再加上一些预留(如 DBA 维护连接、备份连接)。
例如:有 5 个应用节点,每个节点连接池配置 100 个连接,那么 max_connections 至少需要设置为 500 + 50(管理/备用连接)= 550。
操作系统限制:每个 TCP 连接都是一个文件句柄。MySQL 打开文件数的限制(open_files_limit)不能低于 max_connections。
MySQL 内部:每个连接都需要线程来处理。虽然 MySQL 的线程模型是轻量级的,但过多的线程切换会消耗 CPU 资源。
建议通过以下 SQL 监控连接使用率:
-- 查看当前设置的最大连接数 SHOW VARIABLES LIKE 'max_connections'; -- 查看历史最大连接峰值 SHOW STATUS LIKE 'Max_used_connections'; -- 计算连接使用率 -- 如果 Max_used_connections / max_connections 经常大于 80%-85%,说明连接数可能不够用,建议调大。 -- 如果 Max_used_connections 远小于 max_connections(例如只有 10%,但服务器内存还有富余),可以考虑适当调小 max_connections 以节省内存开销。
没有一个固定的标准答案。建议的做法是:
估算业务峰值:根据业务发展预估并发量。
参考硬件:确保内存能支撑 max_connections * 每个连接的平均内存开销。
监控调整:上线后通过 Max_used_connections 观察峰值,找到那个既不会成为瓶颈(连接不够用报错),也不会浪费资源(设置过高导致内存耗尽)的平衡点。
如果你的服务器内存相对有限,需要我提供一个基于内存的计算方式吗?