文档首页
MySQL 8.4 参考手册
相关文档 下载本手册

MySQL 8.4 参考手册  /  MySQL 8.4 常见问题解答  /  MySQL 8.4 常见问题解答:MySQL 企业线程池

A.15 MySQL 8.4 常见问题解答:MySQL 企业线程池

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

A.15.1.

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

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

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

有关更多信息,请参见 第 7.6.3 节,“MySQL 企业线程池”

A.15.2.

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

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

有关更多信息,请参见 第 7.6.3.3 节,“线程池操作”

A.15.3.

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

MySQL 连接池在客户端运行,以确保 MySQL 客户端不会不断地连接到和断开与 MySQL 服务器的连接。它旨在将空闲连接缓存在 MySQL 客户端中,以便其他用户在需要时使用它们。这最大限度地减少了在向 MySQL 服务器提交查询时建立和拆除连接的开销和成本。MySQL 连接池无法了解后端 MySQL 服务器的查询处理能力或负载。相比之下,线程池在 MySQL 服务器端运行,旨在管理接收到的来自访问后端 MySQL 数据库的客户端连接的传入并发连接和查询的执行。由于职责分离,MySQL 连接池和线程池是正交的,可以相互独立地使用。

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

A.15.4.

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

有一些经验法则可以考虑用于最佳的线程池用例

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

如果您正在使用 innodb_thread_concurrency 来限制并发执行的语句数量,您会发现线程池解决了相同的问题,但效果更好,因为它将连接分配给线程组,然后根据事务内容、用户定义的指定等对执行进行排队。

最后,如果您的工作负载主要包含短查询,那么线程池应该会有所帮助。

要了解更多信息,请参见 第 7.6.3.4 节,“线程池调优”

A.15.5.

有推荐的线程池配置吗?

线程池具有许多受用例驱动的配置参数,这些参数会影响其性能。要了解这些参数以及有关调优的提示,请参见 第 7.6.3.4 节,“线程池调优”