A.15 MySQL 5.7 FAQ:MySQL 企业线程池


**A.15.1. **
什么是线程池,它可以解决什么问题?
MySQL 线程池是一个 MySQL 服务器插件,它扩展了 MySQL 服务器的默认连接处理功能,以限制同时执行的语句/查询和事务的数量,以确保每个语句/查询和事务具有足够的 CPU 和内存资源来完成其任务。对于 MySQL 5.7,Thread Pool 插件包含在商业产品 MySQL Enterprise Edition 中。
MySQL Server 中的默认线程处理模型在每个 Client 端 Connecting 使用一个线程执行语句。随着越来越多的 Client 端连接到服务器并执行语句,整体性能下降。线程池插件提供了另一种线程处理模型,旨在减少开销并提高性能。线程池插件通过有效 Management 大量 Client 端连接的语句执行线程来提高服务器性能,尤其是在现代多 CPU /核心系统上。
有关更多信息,请参见第 5.5.3 节“ MySQL 企业线程池”

**A.15.2. **
线程池如何限制和 Management 并发会话和事务以实现最佳性能和吞吐量?
线程池使用“分而治之”的方法来限制和平衡并发。与 MySQL Server 的默认连接处理不同,线程池将连接和线程分开,因此连接与执行从这些连接接收的语句的线程之间没有固定的关系。然后,线程池 Management 可配置线程组内的 Client 端连接,在该 Client 端组中,Client 端连接将根据其提交完成的工作的性质进行优先级排序和排队。
有关更多信息,请参见第 5.5.3.3 节“线程池操作”

**A.15.3. **
线程池与 Client 端连接池有何不同?
MySQL 连接池在 Client 端运行,以确保 MySQLClient 端不会一直与 MySQL 服务器连接和断开连接。它旨在在 MySQLClient 端中缓存空闲连接,以供其他用户在需要时使用。这将查询提交到 MySQL 服务器时构建和拆除连接的开销和开销降至最低。 MySQL 连接池对于查询处理功能或后端 MySQL 服务器的负载没有可见性。相比之下,线程池在 MySQL 服务器端运行,旨在 Management 入站并发连接和查询的执行,这些请求是从访问后端 MySQL 数据库的 Client 端连接接收到的。由于职责分离,MySQL 连接池和线程池是正交的,可以彼此独立使用。
第 27 章,连接器和 API中介绍了通过 MySQL 连接器进行的 MySQL 连接池。

**A.15.4. **
什么时候应该使用线程池?
对于最佳线程池用例,有一些经验法则需要考虑:
MySQL Threads_running变量跟踪当前在 MySQL Server 中执行的并发语句的数量。如果此变量始终超出服务器无法最佳运行的区域(对于 InnoDB 工作负载,通常超过 40 个),则线程池将是有益的,尤其是在极端并行超载情况下。
如果使用innodb_thread_concurrency限制并发执行的语句数,则会发现线程池解决了相同的问题,只有通过将连接分配给线程组,然后根据事务内容,用户定义的名称对执行进行排队等方法,才能更好地解决该问题。向前。
最后,如果您的工作量主要包括简短查询,那么线程池将是有益的。
要了解更多信息,请参阅第 5.5.3.4 节“线程池调整”

**A.15.5. **
是否建议使用线程池配置?
线程池具有许多用户案例驱动的配置参数,这些参数会影响其性能。要了解这些内容以及调优技巧,请参阅第 5.5.3.4 节“线程池调整”