异常出现
业务反应数据库很卡,登录数据库查看发现很多线程是login 状态

官网对login的解释是
The initial state for a connection thread until the client has been authenticated successfully.
意思是连接的线程一直处于初始状态,有很多,说明应该是被阻塞了。
查看线程设置

发现thread_pool_max_threads被错误设置成5
分析
thread_pool_max_threads
threadpool中最大线程数目,所有group中worker线程总数超过该限制后不能继续创建更多线程,默认100000
thread_pool_oversubscribe
一个group中线程数过载限制,当一个group中线程数超过次限制后,继续创建worker线程会被延迟,默认3
thread_pool_size
threadpool中group数量,默认为cpu核心数,server启动时自动计算
最大并发数thread_pool_oversubscribe * thread_pool_size
由以上信息可以知道当thread_pool_max_threads被设置为5后,就不能继续创建线程给新进入的连接使用了,因此才会被阻塞,处于login的状态。
处理
将thread_pool_max_threads改为400
将thread_pool_oversubscribe从3调整为5
查看线程状态

Threads_connected 这个数值指的是打开的连接数.
Threads_running 这个数值指的是激活的连接数,这个数值一般远低于connected数值.
Threads_connected 跟show processlist结果相同,表示当前连接数。准确的来说,Threads_running是代表当前并发数




