## A.15 MySQL 8.0 常见问题解答：MySQL 企业线程池

[](<>)A.15.1.[什么是线程池，它解决了什么问题？](faqs-thread-pool.html#faq-thread-pool-what-solve)A.15.2.[线程池如何限制和管理并发会话和事务以获得最佳性能和吞吐量？](faqs-thread-pool.html#faq-thread-pool-how-manage-operation)A.15.3.[线程池与客户端连接池有何不同？](faqs-thread-pool.html#faq-thread-pool-how-diff-connector-pool)A.15.4。[什么时候应该使用线程池？](faqs-thread-pool.html#faq-thread-pool-when-use)A.15.5。[有推荐的线程池配置吗？](faqs-thread-pool.html#faq-thread-pool-what-config-recommend)

| [](<>)[](<>)<br/><br/>**A.15.1.** | 什么是线程池，它解决了什么问题？ |
| :-------------------------------- | :--------------- |
|  | MySQL 线程池是一个 MySQL 服务器插件，它扩展了 MySQL 服务器的默认连接处理能力，以限制并发执行的语句/查询和事务的数量，以确保每个都有足够的 CPU 和内存资源来完成其任务。对于 MySQL 8.0，线程池插件包含在商业产品 MySQL 企业版中。<br/><br/>MySQL 服务器中的默认线程处理模型使用每个客户端连接一个线程来执行语句。随着越来越多的客户端连接到服务器并执行语句，整体性能会下降。线程池插件提供了另一种线程处理模型，旨在减少开销并提高性能。线程池插件通过有效管理大量客户端连接的语句执行线程来提高服务器性能，尤其是在现代多 CPU/核心系统上。<br/><br/>有关详细信息，请参阅[第 5.6.3 节，“MySQL 企业线程池”](thread-pool.html). |
| [](<>)[](<>)<br/><br/>**A.15.2.** | 线程池如何限制和管理并发会话和事务以获得最佳性能和吞吐量？ |
|  | 线程池使用“分而治之”的方法来限制和平衡并发。与 MySQL 服务器的默认连接处理不同，线程池将连接和线程分开，因此连接和执行从这些连接接收到的语句的线程之间没有固定的关系。然后，线程池在可配置的线程组中管理客户端连接，根据提交完成的工作的性质对它们进行优先级排序和排队。<br/><br/>有关详细信息，请参阅[第 5.6.3.3 节，“线程池操作”](thread-pool-operation.html). |
| [](<>)[](<>)<br/><br/>**A.15.3.** | 线程池与客户端连接池有何不同？ |
|  | MySQL 连接池在客户端运行，以确保 MySQL 客户端不会不断地连接和断开与 MySQL 服务器的连接。它旨在缓存 MySQL 客户端中的空闲连接，以供其他用户在需要时使用。这最大限度地减少了在将查询提交到 MySQL 服务器时建立和拆除连接的开销和费用。MySQL 连接池无法查看后端 MySQL 服务器的查询处理能力或负载。相比之下，线程池在 MySQL 服务器端运行，旨在管理入站并发连接和查询的执行，因为它们是从访问后端 MySQL 数据库的客户端连接接收的。由于职责分离，MySQL Connection Pool 和 Thread Pool 是正交的，可以相互独立使用。<br/><br/>通过 MySQL 连接器的 MySQL 连接池包含在[第 29 章，*连接器和 API*](connectors-apis.html). |
| [](<>)[](<>)<br/><br/>**A.15.4。** | 什么时候应该使用线程池？ |
|  | 对于最佳线程池用例，需要考虑一些经验法则：<br/><br/>MySQL的[`线程运行`](server-status-variables.html#statvar_Threads_running)变量跟踪当前在 MySQL 服务器中执行的并发语句的数量。如果此变量持续超过服务器无法以最佳方式运行的区域（对于 InnoDB 工作负载通常超过 40），线程池应该是有益的，尤其是在极端并行过载情况下。<br/><br/>如果您正在使用[`innodb_thread_concurrency`](innodb-parameters.html#sysvar_innodb_thread_concurrency)为了限制并发执行语句的数量，您应该会发现线程池解决了同样的问题，但更好的是，它通过将连接分配给线程组，然后根据事务内容、用户定义的指定等对执行进行排队。<br/><br/>最后，如果您的工作负载主要包括短查询，线程池应该是有益的。<br/><br/>要了解更多信息，请参阅[第 5.6.3.4 节，“线程池调整”](thread-pool-tuning.html). |
| [](<>)[](<>)<br/><br/>**A.15.5。** | 有推荐的线程池配置吗？ |
|  | 线程池有许多影响其性能的用户案例驱动的配置参数。要了解这些和调优技巧，请参阅[第 5.6.3.4 节，“线程池调整”](thread-pool-tuning.html). |
