Error number: MY-011111; Symbol: ER_THREAD_POOL_FAILED_TO_CREATE_POOL; SQLSTATE: HY000
Message: Can’t create pool thread (error %d, errno: %d).
MySQL错误 MY-011111 (ER_THREAD_POOL_FAILED_TO_CREATE_POOL) 提示池线程创建失败,具体提示信息为:Thread pool (0) failed to create a pool for the given configuration (size: 8, queue-size: 0, flags: 0)
错误说明
这一错误提示表明MySQL运行时线程池创建失败,可能是MySQL安装和配置缺失,也可能是MySQL工作负载太高,线程池创建比MySQL可以提供的资源还要大。
常见案例
当MySQL服务器拒绝新的连接或创建新数据库时,出现此错误。当MySQL服务器存在多个用户连接(尤其是处理连接请求)并有大量查询被执行时也可能出现此错误。
解决方法
在解决此错误之前,有必要运行 mysql-zz 命令以获取更多的信息,以及检查系统日志来确定可能的原因,例如临时文件系统满,可能需要扩展/dev/shm等。此外,需要检查MySQL服务器资源(内存和CPU)是否足够,以容纳更多的连接。
一种解决方案是将max_connections和thread_pool_size设置为可以有效利用可用资源的有效值,这样可以确保提供的资源足以满足所有连接的请求。需要检查是否有空闲内存可以分配,以便创建新的线程池。
接下来,应考虑Kerberos认证,以减少连接的消耗,可以通过配置client_authentication_plugin来做到。此外,可以考虑改变线程池的策略,来使用协作模式,并通过thread_pool_high_priority_connection参数选择,以优先以适当的目标处理某些SQL语句。此外还可以使用thread_pool_stall_limit参数来定义最大的排队等待时间,以减少等待的连接的对性能的影响。如果发现内存紧张,则可能需要缩减sum_thread_pool_sizes和server_thread_pool_size参数。
然后,应该在MySQL数据库中使用索引以及适当的WHERE条件获取最佳性能,以确保尽可能少的连接以及优化执行I/O,CPU资源消耗。此外,还可以考虑优化MySQL应用程序以改善负载,并管理其内存使用,以用最少的资源提供最大的性能。
最后,应以友好和稳定的方式重新启动MySQL服务器以清除内存中的某些连接,并避免超负载运行状态的出现。