项目场景:
项目并发不是特别高,mysql数据库配置没有做过特殊设置,程序访问数据库是使用mybatis,用到了数据库连接池。这问题比较普遍,可能调几个参数就搞定了,但要理解它的本质,再遇到类似的问题就心中有剑,无所不惧。
问题描述:
too many connection 的本质错误就是无法建立新的连接了,因为客户端与mysql建立的连接数已经满了,那是达到多少了,可以直接看mysql的max_connections参数,系统默认151 。都有哪些连接,通过命令show processlist去查看。一般情况下查看连接情况会发现大量的sleep连接占满了。
原因分析:
数据库和连接池是直接相关的,连接池的配置和参数设置一定是要结合数据库本身的参数去设置,而整体要结合实际应用和并发量去考虑,mysql的max_connections和wait_timeout参数是和问题直接相关的,但不是随便改了就彻底解决问题了,可以根据实际情况做调整。连接池的参数也显得很关键,真正创建连接以及连接的数量,存活状况都是来自连接池的设置。所以密不可分,需要通盘考虑,根据业务和场景以及出现的问题整体设置。