文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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

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

A.15.1.

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

MySQL 线程池是 MySQL 服务器插件,它扩展了 MySQL 服务器的默认连接处理功能,限制并发执行的语句/查询和事务的数量,以确保每个语句/查询和事务都有足够的 CPU 和内存资源来完成其任务。对于 MySQL 9.0,线程池插件包含在 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 节,“线程池调优”.