MySQL连接数优化的核心在于合理配置参数、提升资源利用率和避免连接浪费。重点不是让连接数越多越好,而是让每个连接高效使用,避免堆积和等待。
合理设置最大连接数(max_connections)
默认的max_connections通常是151,最大可设为10万以上,但不能盲目调高。连接数过多会消耗大量内存,可能导致系统崩溃。
计算单个连接内存占用(如sort_buffer_size、join_buffer_size等),确保总内存不超物理限制 根据业务峰值预估实际需要的连接数,一般几百到几千足够 通过SHOW VARIABLES LIKE 'max_connections';查看当前值 修改配置文件my.cnf中设置:max_connections = 500启用连接池或使用持久连接
频繁创建和销毁连接开销大,应尽量复用连接。
应用层使用连接池(如Java的HikariCP、Druid,Python的SQLAlchemy+pools) PHP可使用PDO长连接,但需注意连接泄漏 中间件如ProxySQL、MaxScale自带连接池功能,可降低后端压力优化超时时间防止连接堆积
长时间空闲连接占资源,及时释放无效连接。
wait_timeout:控制非交互式连接的空闲超时,建议设为300秒以内 interactive_timeout:控制交互式连接超时,同样建议缩短 connect_timeout:防止恶意慢连接,通常设为10秒 定期检查SHOW PROCESSLIST;是否有大量Sleep状态连接监控与诊断连接使用情况
通过状态变量判断连接是否紧张或存在泄漏。
SHOW STATUS LIKE 'Threads_connected'; 查看当前连接数 SHOW STATUS LIKE 'Max_used_connections'; 历史最高使用数 若接近max_connections,说明需扩容或优化 结合慢查询日志分析是否有长事务阻塞连接释放基本上就这些。关键不是堆连接,而是让连接快进快出,配合连接池和合理超时,系统更稳定。不复杂但容易忽略。
