MySQL-Optimierung Verbindungsoptimierung

MySQL-Optimierung Verbindungsoptimierung

Im Artikel MySQL-Optimierung: Cache-Optimierung wird ein sehr wichtiges Konzept erwähnt, nämlich „show variables“ (Variablen anzeigen), das zum Anzeigen der vom System kompilierten oder in my.cnf konfigurierten Variablenwerte verwendet wird. Als Status anzeigen wird der Statuswert bezeichnet, der die Statusinformationen der aktuellen Serviceinstanz anzeigt und ein sich dynamisch ändernder Wert ist. Daher wird es häufig verwendet, um zu beobachten, ob der aktuelle MySQl-Betrieb normal ist. Wenn dies nicht der Fall ist, kann die Leistung von MySQL durch Anpassen statischer Parameter verbessert werden. Daher ist das Verständnis des Unterschieds zwischen diesen beiden Konzepten die Grundlage für die nachfolgende Optimierung.

MySQL-Verbindungsoptimierung

Ich erinnere mich, dass ich einmal keine Verbindung herstellen konnte, als ich innerhalb der Firma eine Verbindung zu MySQL herstellen wollte. Nachdem wir den DBA gefunden hatten, untersuchten wir die Ursache und stellten fest, dass die aktuelle Anzahl der MySQL-Verbindungen voll war. Nach Anpassungen war das Problem behoben. Für den Fehler „zu viele Verbindungen“ gibt es im Allgemeinen zwei Gründe: Der erste ist, dass sich tatsächlich zu viele Personen mit MySQL verbinden, wodurch die Anzahl der Verbindungen erschöpft ist. Der zweite Grund liegt darin, dass der Wert für „max_connections“ zu klein ist.

1. Verbindungsparameter (Variablen anzeigen)

mysql> Variablen wie „%connect%“ anzeigen;
+-----------------------------------------------------------+-----------------+
| Variablenname | Wert |
+-----------------------------------------------------------+-----------------+
| Zeichensatzverbindung | utf8 |
| Sortierverbindung | utf8_general_ci |
| Verbindungstimeout | 10 |
| Trennung bei abgelaufenem Passwort | EIN |
| init_connect | |
| max_Verbindungsfehler | 100 |
| max_Verbindungen | 151 |
| Max. Benutzerverbindungen | 0 |
| Leistungsschema_Sitzungsverbindungsattrs_Größe | 512 |
+-----------------------------------------------------------+-----------------+ 

max_connections bezieht sich auf die maximale Anzahl gleichzeitiger Verbindungen, die eine MySQL-Dienstinstanz gleichzeitig annehmen kann. MySQL unterstützt tatsächlich einen Algorithmus, der die maximale Anzahl an Verbindungen um eins erhöht und so sicherstellt, dass der Superadministrator auch dann noch eine Verbindung zum Server herstellen kann, wenn die Anzahl der Verbindungen aufgebraucht ist, um diese zu verwalten.

max_user_connections legt die maximale Anzahl gleichzeitiger Verbindungen für das angegebene Konto fest.

max_connect_errors Wenn ein illegaler Host böswillig eine Verbindung zum MySQL-Server herstellt und die Anzahl der aufgetretenen Fehler den festgelegten Wert erreicht, löst MySQL alle Verbindungen von diesem Host auf. Es wird jedoch nach der Ausführung von Flush Hosts gelöscht.

2. Verbindungsstatus (Status anzeigen)

Zu beachten ist, dass Variablenwerte (Anzeigevariablen) mit einem Kleinbuchstaben beginnen, während Statuswerte (Anzeigestatus) mit einem Großbuchstaben beginnen. Diese Unterscheidung hilft beim Erinnern und Einordnen

mysql> Status wie „%connections%“ anzeigen;
+--------------------------------------+----------+
| Variablenname | Wert |
+--------------------------------------+----------+
| Verbindungsfehler_max_Verbindungen | 0 |
| Verbindungen | 197 |
| Max_genutzte_Verbindungen | 2 |
+--------------------------------------+----------+

Connection_errors_max_connections Wenn die maximale Anzahl gleichzeitiger Verbindungen von MySQL größer ist als die maximale Anzahl gleichzeitiger Verbindungen in der Systemvariable (Variablen anzeigen), wird die Anzahl der Ablehnungen in dieser Variable aufgezeichnet. Wenn der Wert „Connection_error_max_connections“ relativ groß ist, bedeutet dies, dass die aktuelle Systemparallelität relativ hoch ist. In diesem Fall sollten Sie eine Erhöhung des Werts „max_connections“ in Erwägung ziehen.

Connections gibt die Anzahl der Verbindungen an, die seit dem Start von MySQL erfolgreich hergestellt wurden. Dieser Wert wird kumuliert.

Max_used_connections gibt den Maximalwert der Anzahl gleichzeitiger Verbindungen seit dem Start von MySQL an. Wenn dieser Wert größer als max_connections ist, weist dies darauf hin, dass sich das System häufig in einem Zustand hoher Parallelität befindet und Sie eine Erhöhung der maximalen Anzahl gleichzeitiger Verbindungen in Erwägung ziehen sollten.

3. Verbindungsthreadparameter (Threadvariablen und -status)

mysql> Variablen wie „thread%“ anzeigen;
+--------------------+-----------------------------------------+
| Variablenname | Wert |
+--------------------+-----------------------------------------+
| Thread-Cache-Größe | 9 |
| Thread-Parallelität | 10 |
| Thread-Handling | ein Thread pro Verbindung |
| Threadstapel | 262144 |
+--------------------+-----------------------------------------+

thread_cache_size legt die Anzahl der Verbindungs-Thread-Caches fest. Dieser Cache entspricht dem MySQL-Thread-Cache-Pool, der inaktive Verbindungs-Threads im Verbindungspool zwischenspeichert, anstatt sie sofort zu zerstören. Wenn bei einer neuen Verbindungsanforderung eine freie Verbindung im Verbindungspool vorhanden ist, wird diese direkt verwendet. Andernfalls muss der Thread neu erstellt werden. Das Erstellen von Threads ist ein nicht unerheblicher System-Overhead. Dieser Teil der Thread-Verarbeitung von MySQL ähnelt der Thread-Verarbeitung von Nginx. Wenn wir später die Thread-Verarbeitung von Nginx vorstellen, werden wir sie zum Vergleich verwenden.

Der Standardwert von thread_handling lautet: ein Thread pro Verbindung. Dies bedeutet, dass für jede Verbindung ein Thread bereitgestellt oder erstellt wird, um die Anforderung zu verarbeiten, bis die Anforderung abgeschlossen und die Verbindung zerstört oder im Cache-Pool gespeichert wird. Wenn der Wert „no-threads“ lautet, bedeutet dies, dass nur ein Thread zum Verarbeiten der Verbindung bereitgestellt wird, der normalerweise für eigenständige Tests verwendet wird.

thread_stack stack bedeutet Heap. Aus diesem Blog wissen wir, dass sowohl Prozesse als auch Threads eindeutige IDs haben. Das Prozess-ID-System verwaltet die ID des Prozesses und die Thread-ID wird vom spezifischen Thread-Bibliotheksbereich verwaltet. Wenn der Prozess oder Thread inaktiv ist, müssen die Prozesskontextinformationen einen Bereich im Speicher öffnen, um die Prozesskontextinformationen zu speichern, damit das Programm schnell aufgeweckt werden kann. Die Standard-Stackgröße für jeden MySQL-Thread ist: 262144/1024=256k

Informationen zum Thread-Status anzeigen

mysql> Status wie „Thread%“ anzeigen;
+---------------------+------+
| Variablenname | Wert |
+---------------------+------+
| Zwischengespeicherte Threads | 1 |
| Threads_verbunden | 1 |
| Threads_erstellt | 2 |
| Laufende Threads | 1 |
+---------------------+------+

Thread_cached Die Anzahl der Threads im aktuellen Thread-Pool

Thread_connected Aktuelle Anzahl der Verbindungen

Thread_cached : Die Anzahl der Threads, die derzeit für die Verbindung erstellt werden. Wenn dieser Wert zu hoch ist, können Sie die Threadcachesize anpassen, d. h. die Größe des Thread-Cache-Pools.

Thred_runnint : Die Anzahl der aktuell aktiven Threads.

Verbindungsanforderungsstapel

Wenn MySQL plötzlich in kurzer Zeit viele Verbindungsanforderungen empfängt, speichert MySQL die Verbindungsanforderungen, die nicht rechtzeitig verarbeitet werden können, im Stapel für die nachfolgende Verarbeitung durch MySQL. Der Parameter back_log legt die Größe des Stapels fest, die mit dem folgenden Befehl angezeigt werden kann:

mysql> Variablen wie „back_log“ anzeigen;
+---------------+-------+
| Variablenname | Wert |
+---------------+-------+
| zurück_log | 80 |
+---------------+-------+

Verbindungsanomalie

mysql> Status wie „Abgebrochen%“ anzeigen;
+------------------+--------+
| Variablenname | Wert |
+------------------+--------+
| Abgebrochene_Clients | 0 |
| Abgebrochene Verbindungen | 219 |
+------------------+--------+

Aborted_clients Die Häufigkeit, mit der ein MySQL-Client abnormal geschlossen wurde.

Aborted_connects Die Anzahl der fehlgeschlagenen Verbindungsversuche mit dem MySQL-Server.

andere

mysql> Status wie „Langsam %“ anzeigen;
+---------------------+--------+
| Variablenname | Wert |
+---------------------+--------+
| Langsame Startthreads | 0 |
| Langsame Abfragen | 0 |
+---------------------+--------+

mysql> Variablen wie „slow_launch_time“ anzeigen;
+------------------+--------+
| Variablenname | Wert |
+------------------+--------+
| langsame Startzeit | 2 |
+------------------+--------+

Slow_lunch_threads: Wenn die zum Erstellen eines Threads benötigte Zeit zu lang ist und den Einstellwert von slow_launch_time überschreitet, wird dies aufgezeichnet.

Sie können die Fehlerstatusinformationen der Verbindung mithilfe von Connection_error% anzeigen:

mysql> Status wie „Connection_error%“ anzeigen;
+--------------------------------------+----------+
| Variablenname | Wert |
+--------------------------------------+----------+
| Verbindungsfehler akzeptieren | 0 |
| Interne Verbindungsfehler | 0 |
| Verbindungsfehler_max_Verbindungen | 0 |
| Verbindungsfehler_Peer-Adresse | 0 |
| Verbindungsfehlerauswahl | 0 |
| Verbindungsfehler_tcpwrap | 0 |
+--------------------------------------+----------+

Connection_errors_peer_address Die Anzahl der Fehler, die beim Nachschlagen der MySQL-Client-IP-Adresse aufgetreten sind.

Das könnte Sie auch interessieren:
  • Ein einfaches Tutorial zur Optimierung von Tabellenverknüpfungsabfragen in MySQL
  • So optimieren Sie die Anzahl der Verbindungen in MySQL, um übermäßigen Datenverkehr zu vermeiden
  • MySQL-Abfrageoptimierung: Einführung in das Sortierlimit für Join-Abfragen (Join-, Order-by- und Limit-Anweisung)
  • MySQL-Abfrageoptimierung: Verwenden von Unterabfragen anstelle von Join-Abfragebeispielen mit Nicht-Primärschlüsseln
  • MySQL-Abfrageoptimierung: eine kurze Erläuterung zur Sortierung von Join-Abfragen

<<:  Linux verwendet iptables, um den Zugriff mehrerer IPs auf Ihren Server zu beschränken

>>:  Detaillierte Erklärung dieses Zeigeproblems in JavaScript

Artikel empfehlen

Detaillierte Erklärung der MySQL-Gruppierung durch Optimierung

Inhaltsverzeichnis Standardausführungsprozess Opt...

Zusammenfassung der MySQL-Indexkenntnisse

Die Einrichtung eines MySQL-Index ist für den eff...

Probleme und Lösungen beim Verbinden des Knotens mit der MySQL-Datenbank

Ich habe heute eine neue Version von MySQL (8.0.2...

CSS realisiert den Maskeneffekt, wenn die Maus über das Bild bewegt wird

1. Setzen Sie den HTML-Code der Maskenebene und d...

Womit kann ich dich, meinen Tisch, retten (Haiyu-Blog)

Tabellen spielten einst eine sehr wichtige Rolle ...

So stellen Sie MySQL so ein, dass die Groß-/Kleinschreibung nicht beachtet wird

MySQL auf Groß-/Kleinschreibung eingestellt Windo...

So verwenden Sie Shell-Skripte in Node

Hintergrund Während der Entwicklung benötigen wir...

Die Funktionen und Unterschiede zwischen deaktiviert und schreibgeschützt

1: schreibgeschützt dient zum Sperren dieses Steue...

Besprechen Sie den Entwicklungstrend der Baidu Encyclopedia UI

<br />Die offizielle Version der Baidu-Enzyk...

jQuery-Plugin zur Implementierung des Minesweeper-Spiels (3)

In diesem Artikel wird der dritte Artikel zur Ver...

Das native VIDEO-Tag der HTML-Seite verbirgt die Download-Button-Funktion

Beim Schreiben eines Webprojekts stieß ich auf ei...