2011-12-29 80 views
8

最近发现在模拟并发线程100-500要求thread_cache_size减少CPU和最大连接数?

使用默认设置,加上在my.cnf以下时,我的MySQL服务器命中90%的CPU占用率过高

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. 或者是有什么地方错了...我想知道在这种情况下,如果MySQL服务器正确测试与最大连接。我想测试一下,如果并发线程可以达到max_connections,但不知何故它不会以我之前测试的相同数量命中。 自改变以来,它现在从未超过50。

有什么想法?

+0

我知道现在要问的时间太晚了,但是您的旧配置,即以上参数的旧值是什么? – ursitesion 2014-10-01 14:30:38

回答

1

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

只是一个猜测:-)