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

So fragen Sie Datum und Uhrzeit in MySQL ab

Vorwort: Bei der Projektentwicklung werden in ein...

So installieren Sie Redis in Docke

1. Suchen Sie nach einem Redis-Image Docker-Suche...

MySQL Master-Slave-Prinzip und Konfigurationsdetails

MySQL Master-Slave-Konfiguration und Prinzip, zu ...

12 nützliche Array-Tricks in JavaScript

Inhaltsverzeichnis Array-Deduplizierung 1. from()...

Tutorial zur Installation und Konfiguration der Version MySQL 5.7.23

Ich habe drei Stunden gebraucht, um MySQL selbst ...

Implementierung von 2D- und 3D-Transformationen in CSS3

CSS3 implementiert 2D-Ebenentransformation und vi...