2011-12-29 115 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來創建線程,並且可能會及時完成操作,因此可以更快地關閉連接,從而保持連接一次打開較少的連接。

只是一個猜測:-)