最近发现我的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 来创建线程,并且它也可能及时完成操作,因此更快地关闭连接,从而保持一次打开的连接数较少。
只是一个猜测:-)