MariaDB 线程池
MySQL 线程池
我已经阅读了 MySQL/MariaDB 线程池的官方文档,但我仍然对此感到困惑;据我了解,线程池有两个优点:
1. 限制太多连接,太多连接会导致上下文切换过多,但似乎选项“--max-connections”也可以限制连接~
2.reuse connected old thread : 当新连接到来时,可以重用未使用的旧线程,但似乎选项“--thread_cache_size”也可以重用旧线程
那么,线程池的优势是什么?
线程池的主要优点是它通常将运行操作的数量限制thread_pool_size
为通常设置为服务器上的 CPU 数量或将使用的 MySQL 数量的值。它可以防止上下文切换和其他内部结构的争用问题。当要运行的查询多于可用 CPU 的数量时,它特别有用。
限制连接max-connections
数将通过限制连接数来限制正在运行的查询数,但任何超过该限制的连接都会因错误而被拒绝。使用线程池时允许更多连接,但查询由线程池排队。要考虑的另一件事是连接并不总是运行查询,因此限制连接并不能有效地限制运行查询。
关于线程缓存,在每个连接使用线程时确实有帮助,但线程池通过重用线程来做自己的事情。
max-connections
仍然可以用于限制连接,但更多的是作为一个类似于 10000 的值的保护措施,而不是服务器工作量的限制器。
例如,如果您有 100 个客户端想要运行查询,同时运行的期望限制为 10 个查询,则将连接限制设置为 10 将只允许 10 个客户端与其他被拒绝并出现错误的客户端连接。最多同时运行 10 个查询,但平均一次运行的查询可能少于 10 个。在不限制连接的情况下,如果所有 100 个客户端都想同时运行一个查询,那么将有 100 个线程同时执行,这可能会导致争用问题,导致吞吐量低于 10 个连接。
如果您改用 10 的线程池大小,则所有 100 个客户端都能够连接并运行它们的查询。如果所有客户端都尝试同时运行一个查询,线程池会将查询排入队列并通常并行执行 10 个,这可以比前面示例中的 100 个并发查询具有更高的吞吐量。