thread_cache_size减少CPU和最大连接?

fly*_*sic 8 mysql

最近发现我的MySQL服务器在模拟并发100-500线程请求时达到了90%的高CPU利用率

使用默认设置以及my.cnf中的以下内容

max_connections = 500
max_allowed_packet = 16M

我注意到max_connection可以达到500,threads_created也可以高达200-500而且我认为这实际上会导致异常高的CPU

因此,而不是使用我调整的默认设置

innodb_buffer_pool_size = 2G #32bit linux server
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_thread_concurrency = 16
innodb_flush_method = O_DIRECT
innodb_additional_mem_pool_size = 20M
table_cache = 1028
thread_cache_size = 16
key_buffer_size=32M
query_cache_size=32M
join_buffer_size=1M

通过相同的负载测试,CPU下降到10%以下......但是我注意到max_connection再也不会达到500.现在不到50 ...

这是由thread_cache_size引起的吗?我调整了吗?默认情况下它是0.或者某处有什么问题...我想知道在这种情况下是否使用max连接正确测试了mysql服务器.我想测试并发线程如何能够达到max_connections但不知何故它从未以我之前测试的相同数量命中.自改变以来,它现在永远不会达到50以上.

任何的想法?

小智 1

创建新线程(因为我猜测您的应用程序不使用连接池)需要相当大的开销。通过这种方式 MySQL 重用线程(最多 16 个),它不再经常利用额外的 CPU 来创建线程,并且它也可能及时完成操作,因此更快地关闭连接,从而保持一次打开的连接数较少。

只是一个猜测:-)