Documentation Home
MySQL 8.0 参考手册  / 附录 A MySQL 8.0 常见问题解答  /  A.15 MySQL 5.7 FAQ:MySQL 企业线程池

A.15 MySQL 5.7 FAQ:MySQL 企业线程池

A.15.1。 什么是线程池,它解决什么问题?
A.15.2。 线程池如何限制和管理并发会话和事务以获得最佳性能和吞吐量?
A.15.3. 线程池与客户端连接池有何不同?
A.15.4。 什么时候应该使用线程池?
A.15.5。 是否有推荐的线程池配置?

A.15.1。

什么是线程池,它解决什么问题?

MySQL 线程池是一个 MySQL 服务器插件,它扩展了 MySQL 服务器的默认连接处理功能,以限制并发执行的语句/查询和事务的数量,以确保每个语句/查询和事务都有足够的 CPU 和内存资源来完成其任务。对于 MySQL 5.7,Thread Pool 插件包含在商业产品 MySQL Enterprise Edition 中。

MySQL 服务器中的默认线程处理模型为每个客户端连接使用一个线程来执行语句。随着越来越多的客户端连接到服务器并执行语句,整体性能会下降。线程池插件提供了另一种线程处理模型,旨在减少开销并提高性能。线程池插件通过有效管理大量客户端连接的语句执行线程来提高服务器性能,尤其是在现代多 CPU/核心系统上。

有关详细信息,请参阅第 5.5.3 节,“MySQL 企业线程池”

A.15.2。

线程池如何限制和管理并发会话和事务以获得最佳性能和吞吐量?

线程池使用分而治之” 的方法来限制和平衡并发。与 MySQL Server 的默认连接处理不同,线程池将连接和线程分开,因此连接和执行从这些连接接收到的语句的线程之间没有固定的关系。然后,线程池在可配置的线程组中管理客户端连接,在这些线程组中,它们根据提交要完成的工作的性质进行优先排序和排队。

有关详细信息,请参阅 第 5.5.3.3 节,“线程池操作”

A.15.3.

线程池与客户端连接池有何不同?

MySQL 连接池运行在客户端,确保 MySQL 客户端不会不断地连接和断开 MySQL 服务器。它旨在缓存 MySQL 客户端中的空闲连接,以供其他用户在需要时使用。这最大限度地减少了在将查询提交到 MySQL 服务器时建立和断开连接的开销和费用。MySQL 连接池对后端 MySQL 服务器的查询处理能力或负载没有可见性。相比之下,线程池在 MySQL 服务器端运行,旨在管理从访问后端 MySQL 数据库的客户端连接接收到的入站并发连接和查询的执行。

通过 MySQL 连接器的 MySQL 连接池在 第 27 章,连接器和 API中介绍。

A.15.4。

什么时候应该使用线程池?

对于最佳线程池用例,需要考虑一些经验法则:

MySQLThreads_running 变量跟踪当前在 MySQL 服务器中执行的并发语句数。如果此变量持续超过服务器无法最佳运行的区域(对于 InnoDB 工作负载通常超过 40),线程池应该是有益的,尤其是在极端并行过载的情况下。

如果您使用 innodb_thread_concurrency来限制并发执行语句的数量,您应该会发现线程池通过将连接分配给线程组,然后根据事务内容、用户定义的名称等对执行进行排队来解决同样的问题,而且效果更好向前。

最后,如果您的工作负载主要包括短查询,线程池应该是有益的。

要了解更多信息,请参阅第 5.5.3.4 节,“线程池调整”

A.15.5。

是否有推荐的线程池配置?

线程池有许多影响其性能的用户案例驱动的配置参数。要了解这些内容和调优技巧,请参阅第 5.5.3.4 节,“线程池调优”