MySQL最大连接数
通常MySQL的最大连接数默认是151 最大可以达到16384。
查看mysql最大连接数:
show variables like '%max_connections%’;
查看当前实际最大使用连接数:
show global status like 'Max_used_connections';
实际连接数是最大连接数的85%较为合适,所以最大连接数我们可以根据实际连接数去设置(如果你想设置最大连接数超过1024,还需要修改文件描述符的上限)。
思考:连接数设置成最大(16384)是最好的吗?
我们把连接数设置成MySQL支持的最大连接数,这样我们的MySQL服务器可以同时支持很多的连接,我们也可以很少概率的遇到:
MySQL: ERROR 1040: Too many connections
的错误信息。
但是受限于服务器的资源限制,在设置了过大的 max_connections 情况下,数据库会因为保持了大量的连接而使服务器资源耗尽而变得无法响应。因为每多一个connection,MySQL就会创建一个线程来维护这个连接,而且CPU在线程间切换需要重新加载对应线程的上下文信息,当 connections 数量不断增加时,CPU 不断在各个 connections 的查询中切换。
所以,设置较大的 max_connections 值时,可能会导致数据库因接受了太多的连接而性能下降,甚至因为资源耗尽而无法响应的风险。
数据库连接池
数据库连接池是维护数据库连接的缓存,以便在将来需要对数据库发出请求时可以重用连接。 连接池用于提高在数据库上执行命令的性能。 因为每连接一次数据库就需要经过一次TCP连接,如果每次访问数据库,都需要连接,然后再关闭,下次访问的时候再连接,是很浪费资源的,所以我们将创建好的连接放到连接池里,需要的时候去拿,不需要的时候就放回连接池(用空间换时间)。
当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
思考:数据库连接池越大越好吗?
假如我们把数据库连接池设置的和MySQL最大连接数一样,这样不是最好吗?可以保证我们的服务有最大的可用连接数使用,每来一个数据库请求,我们都有空闲的连接可以使用。
这样的话,又回到了,我们上面遇到的问题(可能会导致服务器因维护了太多的数据库连接而性能下降,甚至因为资源耗尽而无法响应的风险)
网友评论