• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • MySQL企业线程池

    A.15.1。

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

    MySQL Thread Pool是一个MySQL服务器插件,它扩展了MySQL服务器的默认连接处理功能,以限制同时执行的语句/查询和事务的数量,以确保每个语句/查询和事务具有足够的CPU和内存资源来完成其任务。对于MySQL 8.0,Thread Pool插件包含在商业产品MySQL Enterprise Edition中。

    MySQL Server中的默认线程处理模型在每个客户端连接中使用一个线程执行语句。随着越来越多的客户端连接到服务器并执行语句,整体性能下降。线程池插件提供了另一种线程处理模型,旨在减少开销并提高性能。线程池插件通过有效地管理大量客户端连接的语句执行线程来提高服务器性能,尤其是在现代多CPU /核心系统上。

    有关更多信息,请参见“ MySQL企业线程池”。

    A.15.2。

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

    线程池使用“分而治之”的方法来限制和平衡并发。与MySQL Server的默认连接处理不同,线程池将连接和线程分开,因此连接与执行从这些连接接收的语句的线程之间没有固定的关系。然后,线程池管理可配置线程组内的客户端连接,在该客户端组中,客户端连接将根据其提交完成的工作的性质进行优先级排序和排队。

    有关更多信息,请参见“线程池操作”。

    A.15.3。

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

    MySQL连接池在客户端运行,以确保MySQL客户端不会一直与MySQL服务器连接和断开连接。它旨在在MySQL客户端中缓存空闲连接,以供其他用户在需要时使用。这将查询提交到MySQL服务器时建立和拆除连接的开销和开销降至最低。MySQL连接池对于查询处理功能或后端MySQL服务器的负载没有可见性。相比之下,线程池在MySQL服务器端运行,旨在管理入站并发连接和查询的执行,这些请求是从访问后端MySQL数据库的客户端连接接收到的。

    连接器和API中介绍了通过MySQL连接器进行的MySQL连接池。

    A.15.4。

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

    对于最佳线程池用例,需要考虑一些经验法则:

    MySQL Threads_running变量跟踪当前在MySQL Server中执行的并发语句的数量。如果此变量始终超出服务器无法最佳运行的区域(对于InnoDB工作负载,通常超出40),则线程池将是有益的,尤其是在极端并行超载情况下。

    如果您使用innodb_thread_concurrency来限制并发执行的语句的数量,则会发现线程池通过将连接分配给线程组,然后根据事务性内容,用户定义的名称等使执行排队,从而解决了同样的问题,只有更好的解决方案。。

    最后,如果您的工作量主要包括简短查询,那么线程池将是有益的。

    要了解更多信息,请参见“MySQL服务器线程池插件”。

    A.15.5。

    有建议的线程池配置吗?

    线程池具有许多用户案例驱动的配置参数,这些参数会影响其性能。要了解这些内容以及调优技巧,请参见“MySQL服务器线程池插件”。