Ich benutze Asp.Net zusammen mit MySQL. In der .Net-Verbindungszeichenfolge habe ich die maximale Poolgröße auf 150 festgelegt.
Wenn ich Folgendes ausführe, erhalte ich diese Werte:
SHOW GLOBAL STATUS LIKE 'max_used_connections'; gives 66
SHOW GLOBAL STATUS LIKE 'Threads_created'; gives 66
SHOW GLOBAL STATUS LIKE 'connections'; gives 474
Was gibt Threads_created / Connections = 0,1392.
Von daher scheint es, als müsste ich zunehmen thread_cache_size
.
Aber wenn ich laufe, SHOW PROCESSLIST
sehe ich immer, dass viele Verbindungen offen sind (die meisten schlafen), weil der Pool von .Net erstellt wurde. Muss ich immer noch das einstellen, thread_cache_size
da ich die Verbindungen aus dem Verbindungspool immer noch wiederverwenden werde? Wenn die Poolgröße 150 ist, ist es Ihrer Meinung nach ein guter Wert thread_cache_size
, 150+ festzulegen? Würde dies die CPU und den Speicher stark beeinträchtigen?
quelle
Gemäß den MySQL-Dokumenten sollten Sie festlegen
thread_cache_size
, dass die meisten neuen Verbindungen Threads aus dem Cache anstelle von neu erstellten Threads verwenden. Dies spart einen gewissen Aufwand bei der Thread-Erstellung, führt jedoch normalerweise nicht zu einer signifikanten Leistungsverbesserung:Dies würde bedeuten, dass Sie Ihr
thread_cache_size
so einstellen solltenThreads_created / Connections
(der Prozentsatz der Verbindungen, die zur Erstellung neuer Threads führen), ist eher gering. Wenn Sie die MySQL-Dokumente wörtlich nehmen ("die meisten"), sollte der Wert <50% sein. Die Antwort von RolandoMySQLDBA lautet <1%. Ich weiß nicht, wer der Wahrheit näher ist.Sie sollten nicht
thread_cache_size
höher als einstellenMax_used_connections
. Der letzte Satz in RolandoMySQLDBAs Antwort ("Zumindest sollte thread_cache_size größer sein als Max_used_connections") erscheint nicht sinnvoll, da er besagt, dass Sie mehr Threads im Cache behalten sollten, als Ihr Server jemals verwendet. MySQL legt sowieso nie so viele Threads im Cache ab - Threads werden nicht präventiv im Cache abgelegt - sie werden erst dort abgelegt, nachdem ein Client einen Thread erstellt und die Verbindung getrennt hat. Wenn Sie niemals X-Clients gleichzeitig verbinden, befinden sich niemals X-Threads im Cache:Siehe auch diese Antwort von Michael:
https://dba.stackexchange.com/a/28701
quelle
Würde ein „neuer Mitarbeiter“ im normalen Arbeitsalltag möglicherweise eine Verbindung benötigen? Die meisten Zauberer werden nicht wissen, wie viele Leute in den nächsten Tagen eingestellt werden könnten. V 8 von MySQL schlägt CAP thread_cache_size bei 100 vor, um eine Überlastung unabhängig von max_used_connections zu verhindern. Für mich ist 100 eine gute GAP.
Bitte sehen Sie diesen Link.
quelle