MariaDB Thread Pool引发的血案

服务器上一台MariaDB机器最近发现就算是连接也需要0.5s的时间, 这导致连接池创建消耗了巨大的时间。

由连接慢我们首先想到了skip-name-resolve是不是没设置,导致了DNS双向解析耗时, 看了参数配置后,排出了这个可能。

然后想着是不是是网络存在问题,于是在本地连接测试,一样有问题。

从Processlist里面看到几乎所有客户端连接都是SLEEP状态,唯一区别是有非常多的 dump线程,因为这台机器是master机器,其slave有30个左右。

然后PSTACK看了下线程,发现这些dump线程都是thread_pool里面生成的线程, 这就是说这些dump线程占用了thread_pool线程数。看了下thread_pool_size才16, 这个值是按照CPU的线程数默认设置的,没有手动设置,还有一个参数是thread_pool_stall_limit, 这个值是一个监控间隔值,超过这个时间,就会唤醒或者新建thread,而且这个值默认值就是500ms, 与延迟的时间基本一致。

动态调整这个值,发现登录确实快了很多,由于Thread pool中有过多的dump线程占用线程池, 导致正常客户端请求无法及时响应,确实是个大坑。

建议不要随便使用thread pool,因为目前使用这个特性的非常少, 除非你对它比较熟悉,不然出现问题,你可能都找不到原因。

results matching ""

    No results matching ""