it-swarm.com.de

Welchen Wert von thread_cache_size soll ich verwenden?

Ich verwende 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 folgende 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

Das ergibt Threads_created/Connections = 0,1392.

Daher muss ich anscheinend thread_cache_size erhöhen.

Aber wenn ich SHOW PROCESSLIST Ausführe, sehe ich immer, dass aufgrund des von .Net erstellten Pools viele Verbindungen offen sind (die meisten schlafen). Muss ich immer noch thread_cache_size Festlegen, da ich die Verbindungen aus dem Verbindungspool weiterhin verwenden werde? Wenn die Poolgröße 150 beträgt, ist es Ihrer Meinung nach ein guter Wert, thread_cache_size Auf 150+ zu setzen? Würde dies die CPU und den Speicher stark beeinflussen?

25
Martin

Basierend auf den Informationen in der MySQL-Dokumentation sollten Sie Folgendes tun: Finden Sie mit Connections heraus, wie viele gleichzeitige Verbindungen mysqld am häufigsten hatte. , Threads_created und Max_used_connections ,

  • SHOW GLOBAL STATUS LIKE 'Connections';
  • SHOW GLOBAL STATUS LIKE 'Threads_created';
  • SHOW GLOBAL STATUS LIKE 'Max_used_connections';

Versuchen Sie Folgendes zu berechnen

Threads_created / Connections: Wenn dies über 0,01 liegt, erhöhen Sie thread_cache_size. Zumindest thread_cache_size sollte größer sein als Max_used_connections.

43
RolandoMySQLDBA

Gemäß den MySQL-Dokumenten sollten Sie thread_cache_size Festlegen, damit die meisten neuen Verbindungen Threads aus dem Cache anstelle von neu erstellten Threads verwenden. Dies spart einen gewissen Aufwand für die Thread-Erstellung, führt jedoch normalerweise nicht zu einer signifikanten Leistungsverbesserung:

Anforderungen für Threads werden erfüllt, indem Threads aus dem Cache nach Möglichkeit wiederverwendet werden. Erst 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 thread_cache_size normalerweise so hoch einstellen, dass die meisten neuen Verbindungen zwischengespeicherte Threads verwenden. (Quelle)

Dies würde bedeuten, dass Sie Ihren thread_cache_size So einstellen sollten, dass Threads_created / Connections (Der Prozentsatz der Verbindungen, die zur Erstellung neuer Threads führen) eher niedrig ist. Wenn Sie die MySQL-Dokumente wörtlich nehmen ("am 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 Max_used_connections Setzen. Der letzte Satz in der Antwort von RolandoMySQLDBA ("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 je = verwendet. MySQL wird sowieso nie so viele Threads in den Cache stellen - es legt keine vorbeugenden Threads in den Cache - es legt sie nur dort ab after Ein Client erstellt einen Thread und trennt die Verbindung. Wenn Sie nie X Clients gleichzeitig verbinden, haben Sie nie 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:

Das Festlegen von thread_cache_size auf einen Wert größer als max_connections 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 eine enorme Menge an Abwanderung aufweisen ... was in einer gut erzogenen Anwendung nicht der Fall sein wird.

https://dba.stackexchange.com/a/28701

11