Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  MySQL 8.4 Frequently Asked Questions  /  MySQL 8.4 FAQ: MySQL Enterprise Thread Pool

A.15 MySQL 8.4 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 8.4,Thread Pool 插件包含在 MySQL Enterprise Edition 中,这是一个商业产品。

MySQL 服务器的默认线程处理模型使用一个线程来执行每个客户端连接。当更多的客户端连接到服务器并执行语句时,总体性能会下降。Thread Pool 插件提供了一个替代的线程处理模型,旨在减少开销并提高性能。Thread Pool 插件通过高效地管理大量客户端连接的语句执行线程,提高服务器性能,特别是在现代多 CPU/核心系统上。

欲了解更多信息,请参阅 第 7.6.3 节,“MySQL Enterprise 线程池”

A.15.2.

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

线程池使用“分而治之”的方法来限制和平衡并发性。与 MySQL 服务器的默认连接处理不同,线程池将连接和线程分离,因此不存在固定的连接和线程关系。然后,线程池将客户端连接分配到可配置的线程组中,并根据工作性质对其进行优先级排序和排队。

欲了解更多信息,请参阅 第 7.6.3.3 节,“线程池操作”

A.15.3.

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

MySQL 连接池在客户端操作,以确保 MySQL 客户端不需要不断地连接和断开 MySQL 服务器。它旨在缓存空闲连接,以便其他用户可以使用它们。这最小化了建立和拆除连接的开销和费用,以便查询可以提交到 MySQL 服务器。MySQL 连接池不知道后端 MySQL 服务器的查询处理能力或负载。相比之下,线程池在 MySQL 服务器端操作,旨在管理来自客户端连接的并发连接和查询的执行。由于职责分离,MySQL 连接池和线程池是正交的,可以独立使用。

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

A.15.4.

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

有几个规则可以考虑使用线程池的最佳用例:

MySQL Threads_running 变量跟踪当前在 MySQL 服务器中执行的并发语句数量。如果这个变量一直超过服务器无法优化的区域(通常是 InnoDB 工作负载超过 40),那么线程池将是有益的,特别是在极端并发过载情况下。

如果您使用 innodb_thread_concurrency 限制并发执行语句的数量,那么您将发现线程池解决了同样的问题,只是更好地将连接分配到线程组中,然后根据事务内容、用户定义的设计ations 等对其进行排队。

最后,如果您的工作负载主要由短查询组成,那么线程池将是有益的。

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

A.15.5.

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

线程池有多个用户驱动的配置参数,这些参数影响其性能。欲了解这些参数和调整提示,请参阅 第 7.6.3.4 节,“线程池调整”