I'm using Asp.Net together with MySQL. In the .Net connection string, I have set Max Pool Size to 150.
If I run the following I get these values:
SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474
Which gives Threads_created / Connections = 0,1392.
So from that it seems like I need to increase thread_cache_size
.
But if I run SHOW PROCESSLIST
I always see that I have a lot of connections open (most of them sleeping) because of the pool created by .Net. Do I still need to set the thread_cache_size
as I still will reuse the connections from the connection pool? If the Pool Size is 150 do you think a good value would be to set thread_cache_size
to 150+? Would this affect CPU and memory a lot?
Based on the info in the MySQL Documentation you should do the following: Find out what the highest number of simultaneous connections mysqld has had using Connections, Threads_created, and Max_used_connections,
SHOW GLOBAL STATUS LIKE 'Connections';
SHOW GLOBAL STATUS LIKE 'Threads_created';
SHOW GLOBAL STATUS LIKE 'Max_used_connections';
Try calculating the following
Threads_created / Connections
: If this is over 0.01, then increasethread_cache_size
. At the very least,thread_cache_size
should be greater thanMax_used_connections
.According to the MySQL docs, you should set
thread_cache_size
so that most new connections use threads from the cache rather than newly created threads. This saves some thread-creation overhead, though normally does not create a significant performance improvement:This would mean that you should set your
thread_cache_size
so thatThreads_created / Connections
(the % of connections that lead to the creation of new threads) is rather low. If you take the MySQL docs literally ("most"), the value should be < 50%. RolandoMySQLDBA's answer says < 1%. I don't know who's closer to the truth.You should not set
thread_cache_size
higher thanMax_used_connections
. The final sentence in RolandoMySQLDBA's answer ("At the very least, thread_cache_size should be greater than Max_used_connections") doesn't seem sensible because it says that you should keep more threads in the cache than your server ever uses. MySQL will never put that many threads in the cache anyway -- it does not pre-emptively put threads in the cache -- it only puts them there after a client creates a thread and disconnects. If you never have X clients connecting at the same time, you will never have X threads in the cache:See also this answer by Michael:
https://dba.stackexchange.com/a/28701
In the common working day, would a 'new hire' possibly need a connection? Most magicians will not know how many people could be hired in the next few days. V 8 of MySQL suggests CAP thread_cache_size at 100 to prevent overload regardless of max_used_connections. For me, 100 is a good CAP.
See this link, please.