Optimierung des MySQL Thread_Stack-Verbindungsthreads

Optimierung des MySQL Thread_Stack-Verbindungsthreads

MySQL kann nicht nur über das Netzwerk, sondern auch über benannte Pipes verbunden werden. Unabhängig davon, welche Methode zur Verbindung mit MySQL verwendet wird, werden alle Clientanforderungen von Threads in MySQL verwaltet. Jede Clientverbindung verfügt über einen entsprechenden Verbindungsthread. In MySQL wird ein Thread-Cache-Pool implementiert, um inaktive Verbindungs-Threads zu speichern, anstatt sie nach Abschluss der Anforderung zu zerstören. Auf diese Weise prüft MySQL bei einer neuen Verbindungsanforderung zunächst, ob sich im Thread-Cache ein inaktiver Verbindungsthread befindet. Wenn dies der Fall ist, wird dieser herausgenommen und direkt verwendet. Wenn kein inaktiver Verbindungsthread vorhanden ist, wird ein neuer Verbindungsthread erstellt. Spezifische Parameter:
Thread_cache_size: Die Anzahl der Verbindungsthreads, die im Thread-Cache-Pool gespeichert werden sollen.
Thread_stack: Die Speichergröße, die MySQL jedem Verbindungsthread bei seiner Erstellung zuweist. Wenn MySQL einen neuen Verbindungsthread erstellt, muss es ihm eine bestimmte Menge an Speicherstapelspeicher zuweisen, um die vom Client angeforderte Abfrage und seine eigenen verschiedenen Status- und Verarbeitungsinformationen zu speichern.
Zeigen Sie die Einstellungswerte von Systemvariablen an, die sich auf Verbindungsthreads beziehen: Zeigen Sie Variablen wie „Thread%“ an.

mysql> Variablen wie „thread%“ anzeigen;
+---------------------+--------+
| Variablenname | Wert |
+---------------------+--------+
| Thread-Cache-Größe | 32 |
| Threadstapel | 196608 |
+---------------------+--------+
2 Zeilen im Satz (0,00 Sek.)

Wie in der Abbildung dargestellt, stellt das System den Thread-Cache-Pool so ein, dass bis zu 25 Verbindungsthreads zwischengespeichert werden. Wenn jeder Verbindungsthread erstellt wird, weist ihm das System 192 KB Speicherstapel zu.
Zeigen Sie an, wie oft das System verbunden wurde und welchen Statuswert der Verbindungsthread im aktuellen System hat.

mysql> Status wie „Verbindungen“ anzeigen;
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| Verbindungen | 620 |
+---------------+-------+
1 Zeile im Satz (0,00 Sek.)

mysql> Status wie „%thread%“ anzeigen;
+------------------------+----------+
| Variablenname | Wert |
+------------------------+----------+
| Verzögerte_Einfügung_von_Threads | 0 |
| Langsame Startthreads | 0 |
| Zwischengespeicherte Threads | 3 |
| Threads_verbunden | 4 |
| Threads_erstellt | 7 |
| Laufende Threads | 1 |
+------------------------+----------+
6 Zeilen im Satz (0,00 Sek.)

Seit dem Start des Systems wurden 620 Clientverbindungen empfangen und 7 Verbindungsthreads erstellt. Derzeit ist 1 Verbindungsthread mit dem Client verbunden, und nur einer der 3 Verbindungsthreads befindet sich im aktiven Zustand, d. h. nur einer verarbeitet die vom Client übermittelte Anforderung. Im Thread-Cache-Pool werden insgesamt 3 Verbindungsthreads zwischengespeichert.

Thread-Cache-Trefferquote:
Thread_Cache_Hit = (Verbindungen – erstellte Threads) / Verbindungen * 100 %;
Nachdem das System eine Zeit lang stabil gelaufen ist, sollte die Thread-Cache-Trefferquote im Allgemeinen bei etwa 90 % liegen, um als normal zu gelten.

Praktische Anwendung:

Für 16G/32G-Maschinen ist im Allgemeinen 512K eingestellt

Wenn die folgende Fehlermeldung angezeigt wird, sollten Sie natürlich eine Erhöhung dieses Wertes in Betracht ziehen.

mysql-debug: Thread-Stapelüberlauf

Fehlerinformationen

Fehlermeldung:
java.sql.SQLException: Thread-Stack-Überlauf: 5456 Bytes von einem 131072 Bytes großen Stack verwendet, 128000 Bytes benötigt. Verwenden Sie „mysqld --thread_stack=#“, um einen größeren Stack anzugeben.

Offizielle entsprechende Information:

Der Standardwert (192 KB) ist für den normalen Betrieb ausreichend. Wenn die Thread-Stack-Größe zu klein ist, begrenzt dies die Komplexität der SQL-Anweisungen, die der Server verarbeiten kann, die Rekursionstiefe gespeicherter Prozeduren und andere speicherintensive Aktionen.

Kann verwendet werden

show variables where `variable_name` = 'thread_stack';

Abfrage der Standardgröße des Thread-Stapels der aktuellen Datenbank. Im Allgemeinen kann sie normal verwendet werden. Wenn die Abfrageanweisung oder die gespeicherte Prozedur jedoch komplex ist, wird ein Thread-Stapelüberlauffehler gemeldet. Ändern Sie in diesem Fall einfach die Standardkonfiguration.

lösen

Windows: Ändern Sie die Datei my-small.ini oder my.ini im MySQL-Installationsverzeichnis auf 256 KB oder größer und starten Sie dann den Dienst neu.

[mysqld]
Thread-Stapel = 256 KB
linux: Sie müssen auch die Konfigurationsdatei ändern, aber! ! ! , nicht die Konfigurationsdatei im Installationsverzeichnis, sondern /etc/my.cnf. Nur diese Datei kann wirksam werden, und dann den Dienst neu starten service mysql restart

[mysqld]
Thread-Stapel = 256 KB

Das könnte Sie auch interessieren:
  • Detaillierte Erläuterung der MySQL-Leistungsoptimierungskonfigurationsparameter thread_cache und table_cache
  • Mysql-Fehlercode: 1436 Thread-Stapelüberlauf
  • mysql - Zusammenfassung der Optimierungsmethoden für den Parameter thread_cache_size
  • Zwei wichtige Parameter bei der Mysql-Optimierung und -Abstimmung: table_cache und key_buffer
  • Startmethode und Parameterdetails für MySQL-Cache (query_cache_size)
  • Analyse der table_cache-Konfigurationsparameter zur MySQL-Leistungsoptimierung
  • Wichtige Parameter für die MySQL-Optimierung key_buffer_size table_cache
  • Optimieren Sie die MySQL-Key_Buffer_Size-Einstellungen
  • Optimierungseinstellung des MySQL-Parameters key_buffer_size

<<:  So benennen Sie in Linux mehrere Dateien gleichzeitig um

>>:  js implementiert einige Funktionen der Eingabekomponente in Element und kapselt sie in eine Komponente (Beispielcode)

Artikel empfehlen

Die Verwendung von FrameLayout in sechs Layouts

Vorwort In der letzten Ausgabe haben wir Ihnen Li...

36 Prinzipien der MySQL-Datenbankentwicklung (Zusammenfassung)

Vorwort Diese Prinzipien sind aus tatsächlichen K...

JavaScript-Webformularfunktion Kommunikation voller praktischer Informationen

1. Einleitung Vorher haben wir über das Front-End...

Tutorial zu HTML-Tabellen-Tags (21): Zeilenrahmen-Farbattribut BORDERCOLOR

Um die Tabelle zu verschönern, können Sie für die...

Bringen Sie Ihnen bei, wie Sie eine Reaktion aus HTML implementieren

Was ist React React ist eine einfache JavaScript-...

Lösung für leere Seite nach Vue-Verpackung

1. Lösung für das Problem, dass die Seite leer is...

Starten Sie alle gestoppten Docker-Container mit einem Befehl neu

Starten Sie alle gestoppten Docker-Container mit ...

Vue-Methode zum Überprüfen, ob der Benutzername verfügbar ist

In diesem Artikelbeispiel wird der spezifische Co...

Wie Sie React forwardRef verwenden und was Sie beachten müssen

Bisher konnte react.forwardRef nicht auf höherwer...

Verwendung von relativen und absoluten Pfaden unter Linux

01. Übersicht Absolute und relative Pfade kommen ...

Detailliertes Installationstutorial für die MySQL-Zip-Archivversion (5.7.19)

1. Laden Sie die Zip-Archivversion von der offizi...

JS-Prinzip der asynchronen Ausführung und Rückrufdetails

1. JS-Prinzip der asynchronen Ausführung Wir wiss...

Centos7.5 installiert die Bereitstellung des binären Pakets mysql5.7.24

1. Umweltvorbereitung: Betriebssystem: CentOS Lin...

JavaScript – Verwenden von Slots in Vue: Slot

Inhaltsverzeichnis Verwenden von Slots in Vue: Sl...