场景描述
业务在高峰期时,客户端经常出现向MySQL建立连接超时,导致系统登录需要十几秒。
原因分析
查看MySQL的错误日志,观察是否有如下信息:connection xxx is established slowly。
有上述日志,说明存在某些连接超过一定时间仍未被MySQL处理,客户端的超时时间大于该时间,就会报错。线程池处理连接等待与该参数thread_pool_oversubscribe相关。
解决方案
对于存在大量新建连接,建议调大thread_pool_oversubscribe增加线程总数。减少线程重复创建与销毁部分的开销,提高性能,同时它也限制了MySQL的running线程数,关键时刻可以保护系统,防止雪崩。
正常情况下,线程池适用于大量短连接的场景,如果客户是长连接,并且连接数量不多(客户端使用了连接池等情况),线程池的影响也不会很大。