mysql最大连接数也是性能优化的一方面,很多开发人员并不关注一这点,因为mysql默认的连接数足够满足
一些小型的应用了,但当网站流量越来越大,并发越来越高,那么你不得不关注这个连接数了。
max_connections:Mysql最大连接数。
参数默认值:100
最大上限值:16384(超过按照16384为准)
mysql连接是有上限的,因为每建立一个连接都会消耗内存,因为我们希望客户端在连接mysql数据库并处理完
响应请求操作后,应该及时断开连接并释放内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白
消耗内存,而且如果连接一直在累加而不断开,当mysql连接数大于该设置值时,就会报“Too many connections”
的错误,那设多少合适?
设置最合适的连接数的公式为:Max_used_connections / max_connections * 100% ≈ 85%
Max_used_connections参数为过去最大的连接数,所以越接近85%越合适,剩下的15%是为预留的连接,防止
突然并发连接增大,当时连接不足。
interactive_timeout : 服务器关闭交互式连接前等待活动的秒数.
参数默认值:28800秒(8小时)
wait_timeout : 服务器关闭非交互连接之前等待活动的秒数。
参数默认值:28800秒(8小时)
该参数其实说白了就是客户端发起请求的连接方式为长连接时,当处理为请求,需等待这两参数的时间后,才会释放,
在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态:
我们发现,但客户端以长连接的方式建立连接时,出来完后,还要sleep一段时间,虽然同个客户端连接
可以复用,不需要重新建立连接,当当高并发的情况下呢?连接一下子就占满了,还不会释放,就会经常
出现“Too many connections”,所以按照PHP手册上的介绍,只适合在并发访问不大的网站上使用数据库
永久连接,但对于一个并发访问不大的网站来说,使用数据库永久连接带来的效率提高似乎没有太大的意义,
从这个角度上来看,我觉得PHP中的数据库永久连接基本上是一个鸡肋的角色,如果你一定要使用数据库
连接池的概念,可以尝试一下sqlrelay或者Apache本身提供的mod_dbd,说不定会有惊喜。