MySQL-mysql 出現too many connections后,大家都是怎麼解決的呢?

MySQL-mysql 出現too many connections后,大家都是怎麼解決的呢?

夜无邪 发布于 2017-06-20 字数 144 浏览 1077 回复 9

mysql的connection是一個有限的資源,每個connection一個線程,所以不能開太多。 如果出現too many connections 後,大家都有什麼好的方法解決呢?

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(9

瑾兮 2017-10-15 9 楼

可以使用mysql_pconnect(),同时对于数据库连接部分使用设计模式中的--单态模式,这样可以减少很多连接数,并且速度上也有提升。。。

瑾兮 2017-10-03 8 楼

增加链接池,再根据实际情况调整参数

夜无邪 2017-09-23 7 楼

max_connections可以开大点,但还是有限的,不能无限大。硬伤。
首先可以查查那些慢SQL操作,优化代码,很多情况下是由于SQL查询慢,不能及时释放连接。
一般我们会增加连接池,分库分表设计。尽可能地减少单次SQL操作的时间。
脚本执行完毕的时候,手动关闭连接,尽快释放连接资源。

泛泛之交 2017-09-18 6 楼

出现too many connections除了访问量激增的情况下,多半是因为某些SQL引起了拥堵所致,注意根据满查询日志来调优,另外mysql持久链接是鸡肋,多数情况下无济于事,只会节外生枝。

泛泛之交 2017-09-09 5 楼

一般这种情况的出现有两种情况
1.业务激增,这个需要根据实际情况分析来进行优化
2.有慢操作阻塞

建议对是否有慢操作进行检查、优化
如果未达到预期目的,再进行加大connection、换机器之类的工作

想挽留 2017-08-28 4 楼

尽量采用中间件+异步的方式操作数据库,这样可以避免资源方面的限制。

偏爱自由 2017-08-13 3 楼

加大最大连接数,减少wait_timeout时间,这个需要实际应用中多尝试
用mysql_pconnect()代替mysql_connect(),减少连接和断开次数
检查耗时的读写sql,针对性的分库分表,读写分离,减少瓶颈库表的压力
复杂的sql语句建议用存储过程代替
补充一下,上面好多兄弟对mysql_pconnect提出了疑问,我建议的初衷是如果频繁与数据库建立连接与断开接连,这种开销会很大,可能会造成大量连接出现CLOSE_TIMEOUT情况出现,导致连接被占用,而mysql_pconnect设计的目的是为了提供一种机制来减少与Mysql服务器建立/断开连接的开销,如果这种方案应用得当可以解决这类问题。当然了,如果mysql持久链接应用不当,比如持久链接使用表锁时,异常情况下会锁表造成其它用户被阻塞,所以这些都得视情况而定,灵活应用,不能一棍子打死

偏爱自由 2017-07-11 2 楼

php环境中得mysql持久链接没有意义只会造成 too many connections,所以请关闭mysql持久链接。

清晨说ぺ晚安 2017-07-02 1 楼

以 Linux + Nginx + PHP + MySQL 为例

一般我会从下面几个思路来寻找解决方法

a. 是否 WEB 的连接数就很大

那么可以考虑用 Varnish(或Squid) 来 Cache 一些动态的请求
通过这个步骤来减少这些动态请求对 MySQL 的请求

b. 机器负载是否很高

可以考虑,哪些是静态数据,哪些是不活跃数据,哪些是活跃数据
如果静态数据较小,那么可以试试静态数据直接保存成 PHP 文件
如果较大,可以放在 TTServer 中去
活跃数据的话,可以保存在 Memcache 中,如果需要持久化,也可
以保存在 TTServer 等 NoSQL 中去

c. 是不是有不合格的 SQL 语句在运行

那么可以用 mysqldumpslow 分析 mysql 的slow query log

d. PHP 里的 mysql.pconnect 可能不太好使

那是很久前我用 mysql.pconnect ,容易出现 MySQL 宕机的情况,改为
mysql.connect 后情况好转,其他语言,或现在的 PHP 未必有这个
情况

e. 申请新机器 :)