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:
Anforderungen für Threads werden erfüllt, indem aus dem Cache entnommene Threads nach Möglichkeit wiederverwendet werden. Nur wenn der Cache leer ist, wird ein neuer Thread erstellt. Diese Variable kann erhöht werden, um die Leistung zu verbessern, wenn Sie viele neue Verbindungen haben. Normalerweise bietet dies keine nennenswerte Leistungsverbesserung, wenn Sie eine gute Thread-Implementierung haben. Wenn Ihr Server jedoch Hunderte von Verbindungen pro Sekunde sieht, sollten Sie normalerweise thread_cache_size so hoch einstellen, dass die meisten neuen Verbindungen zwischengespeicherte Threads verwenden . (Quelle)
Dies würde bedeuten, dass Sie Ihr thread_cache_size
so einstellen sollten Threads_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 nichtthread_cache_size
höher als einstellen Max_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:
Wenn ein Client die Verbindung trennt, werden die Threads des Clients in den Cache gestellt, wenn dort weniger als thread_cache_size-Threads vorhanden sind. (Quelle)
Siehe auch diese Antwort von Michael:
Thread_cache_size auf einen Wert größer als max_connections zu setzen, scheint ein äußerst wenig hilfreicher Rat zu sein ... der Cache kann möglicherweise nicht größer als max_connections werden, und selbst ein Cache in der Nähe dieser Größe kann nur dann sinnvoll sein, wenn Ihre Threads über eine enorme Menge an Churn verfügen ... was in einer gut erzogenen Anwendung nicht der Fall sein wird.
https://dba.stackexchange.com/a/28701