Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

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

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

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

有关更多信息,请参阅 第 7.6.3 节,“MySQL Enterprise Thread Pool”

A.15.2.

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

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

有关更多信息,请参阅 第 7.6.3.3 节,“Thread Pool Operation”

A.15.3.

线程池与客户端连接池有什么区别?

MySQL 连接池在客户端操作,以确保 MySQL 客户端不需要不断地连接和断开连接到 MySQL 服务器。这是为了减少连接和断开连接的开销,并提高性能。MySQL 连接池没有 visibility 到后端 MySQL 服务器的查询处理能力或负载。相比之下,线程池在 MySQL 服务器端操作,旨在管理来自客户端连接的并发连接和查询的执行。由于职责分离,MySQL 连接池和线程池是正交的,可以独立使用。

MySQL 连接池通过 MySQL 连接器实现,详见 第 31 章,《Connectors and APIs》

A.15.4.

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

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

MySQL Threads_running 变量跟踪 MySQL 服务器当前执行的语句数量。如果该变量始终超过服务器的最佳操作区域(通常是 InnoDB 工作负载超过 40),那么线程池将是有益的,特别是在极端并发过载情况下。

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

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

要了解更多信息,请参阅 第 7.6.3.4 节,“Thread Pool Tuning”

A.15.5.

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

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