我应该使用什么值的thread_cache_size?

我正在使用Asp.Net和MySQL。 在.Net连接string中,我将“最大池大小”设置为150。

如果我运行以下,我得到这些值:

SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66 SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66 SHOW GLOBAL STATUS LIKE 'connections'; gives 474 

这给了Threads_created / Connections = 0,1392。

所以从这似乎我需要增加thread_cache_size

但是,如果我运行SHOW PROCESSLIST ,总是会看到由于.Net创build的池,我打开了很多连接(其中大部分都处于睡眠状态)。 我仍然需要设置thread_cache_size因为我仍然会重用连接池中的连接吗? 如果池大小是150你认为一个很好的价值是将thread_cache_size设置为150+? 这会影响CPU和内存吗?

    基于MySQL文档中的信息,您应该执行以下操作:查找使用ConnectionsThreads_createdMax_used_connections的最大同时连接数mysqld的数量,

    • SHOW GLOBAL STATUS LIKE 'Connections';
    • SHOW GLOBAL STATUS LIKE 'Threads_created';
    • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

    尝试计算以下内容

    Threads_created / Connections :如果超过0.01,则增加thread_cache_size 。 至less, thread_cache_size应该大于Max_used_connections

    根据MySQL文档,您应该设置thread_cache_size以便大多数新连接使用caching中的线程而不是新创build的线程。 这节省了一些线程创build的开销,尽pipe通常不会产生显着的性能改进:

    如果可能的话,重用使用高速caching的线程来满足线程请求,并且只有当高速caching为空时才创build新的线程。 如果您有很多新的连接,可以增加此variables以提高性能。 通常情况下,如果你有一个好的线程实现,这不会提供显着的性能改进 。 但是,如果您的服务器每秒看到数百个连接,则通常应将thread_cache_size设置为足够高,以便大多数新连接使用caching线程 。 (资源)

    这意味着你应该设置你的thread_cache_size以便Threads_created / Connections (导致创build新线程的连接的百分比)相当低。 如果你从字面上(“最”)的MySQL文档,值应该是<50%。 RolandoMySQLDBA的回答是<1%。 我不知道谁更接近真相。

    您不应该将thread_cache_size设置为高于Max_used_connections 。 RolandoMySQLDBA答案中的最后一句(至lessthread_cache_size应该大于Max_used_connections)似乎不合理,因为它说你应该在caching中保留比你的服务器更多的线程。 无论如何,MySQL永远不会把那么多的线程放在caching中 – 它不会先把线程放入caching中 – 它只会客户端创build一个线程并断开连接后才将它们放到那里。 如果您从未有X客户端同时连接,则caching中永远不会有X个线程:

    当客户端断开连接时,如果线程数less于thread_cache_size,客户端的线程将被放入caching中。 (资源)

    另请参阅Michael的这个答案 :

    将thread_cache_size设置为一个大于max_connections的值看起来是非常不利的build议……caching不可能比max_connections大,甚至在任何接近该大小的caching中,只有在线程上有大量的stream失时才有意义…在一个乖巧的应用程序中,情况并非如此。

    https://dba.stackexchange.com/a/28701

    在平常的工作日,“新雇用”可能需要一个连接? 大多数魔术师不知道在接下来的几天里可以雇多less人。 MySQL的V8build议CAP的thread_cache_size为100,以防止过载而不pipemax_used_connections。 对我来说,100是一个很好的CAP。