Detaillierte Zusammenfassung von MySQL und verbindungsbezogenen Timeouts

Detaillierte Zusammenfassung von MySQL und verbindungsbezogenen Timeouts

MySQL und verbindungsbezogene Timeouts

Vorwort:

Heute hat mich ein Kollege gefragt, warum bei der Abfrage einer MySQL-Datenbank und großen Datenmengen immer die Sitzung getrennt wird. Zuerst dachte ich, es handele sich um ein Timeout-Problem bei der MySQL-Verbindung, aber es stellte sich heraus, dass es an einer Instabilität des Netzwerks lag.

Im Folgenden sind die Timeouts für Verbindungen zusammengefasst

Slave-Netz-Timeout

Die Anzahl der Sekunden, die auf weitere Daten vom Master gewartet werden soll, bevor der Slave die Verbindung als unterbrochen betrachtet, den Lesevorgang abbricht und versucht, die Verbindung wiederherzustellen. Der erste Wiederholungsversuch erfolgt unmittelbar nach dem Timeout. Das Intervall zwischen den Wiederholungsversuchen wird durch die Option MASTER_CONNECT_RETRY für die Anweisung CHANGE MASTER TO gesteuert, und die Anzahl der Wiederverbindungsversuche wird durch die Option --master-retry-count begrenzt. Der Standardwert beträgt 3600 Sekunden (eine Stunde).
Wenn der Slave glaubt, dass ein Problem mit der Verbindung zum Master besteht, wartet er N Sekunden, trennt dann die Verbindung und stellt die Verbindung zum Master wieder her.

net_read_timeout:

Die Anzahl der Sekunden, die auf weitere Daten von einer Verbindung gewartet werden soll, bevor der Lesevorgang abgebrochen wird. Wenn der Server vom Client liest, ist net_read_timeout der Timeout-Wert, der steuert, wann abgebrochen wird.
Die Anzahl der Sekunden, die auf Daten von einer Verbindung gewartet werden soll, bevor der Lesevorgang beendet wird. net_read_timeout steuert, wann beim Lesen von Daten von einem Client eine Zeitüberschreitung beim Server auftritt.

net_write_timeout:

Die Anzahl der Sekunden, die gewartet werden soll, bis ein Block in eine Verbindung geschrieben wurde, bevor der Schreibvorgang abgebrochen wird. Wenn der Server an den Client schreibt, ist net_write_timeout der Timeout-Wert, der steuert, wann der Schreibvorgang abgebrochen wird.
Wie viele Sekunden mit dem Schreiben eines Blocks in die Verbindung gewartet werden soll, bevor der Schreibvorgang beendet wird; wenn der Dienst Daten in den Client schreibt, steuert „net_write_timeout“, wann das Timeout erfolgt.

Wartezeit

Die Anzahl der Sekunden, die der Server auf Aktivität bei einer nicht interaktiven Verbindung wartet, bevor er sie schließt.
Die Zeit, die benötigt wird, um eine Verbindung ohne Interaktion vom Server zu schließen.

interaktives_Timeout:

Die Anzahl der Sekunden, die der Server auf Aktivität bei einer interaktiven Verbindung wartet, bevor er sie schließt.
Die Zeit, die benötigt wird, um eine Verbindung ohne Interaktion vom Server zu schließen.

Verbindungstimeout

Die Anzahl der Sekunden, die der mysqld-Server auf ein Verbindungspaket wartet, bevor er mit „Bad handshake“ antwortet. Der Standardwert beträgt 10 Sekunden.

Die Zeit, die auf eine Verbindungsantwort gewartet wird

connect_timeout: wird während der Verbindungsaufbauphase (Authentifizierung) wirksam

interactive_timeout und wait_timeout: arbeiten während der Verbindungsleerlaufphase (Ruhezustand)
net_read_timeout und net_write_timeout: werden während der aktiven Verbindungsphase (Abfrage) wirksam.

Der Aufbau einer MySQL-Verbindung ist das Ergebnis mehrerer Handshakes. Neben der Übereinstimmungsüberprüfung von Benutzername und Passwort gibt es auch eine IP->HOST->DNS->IP-Überprüfung. Jeder Schritt kann aufgrund von Netzwerkproblemen zu einer Blockierung des Threads führen. Um zu verhindern, dass Threads durch unnötiges Warten auf Überprüfungen verschwendet werden, werden Verbindungsanforderungen, die connect_timeout überschreiten, abgelehnt.

Auch wenn keine Netzwerkprobleme vorliegen, können Sie nicht zulassen, dass der Client die Verbindung dauerhaft belegt. MySQL trennt aktiv die Verbindung zu Clients, die länger als wait_timeout (oder interactive_timeout, abhängig vom client_interactive-Flag) im Ruhezustand verbleiben.

Auch wenn sich die Verbindung nicht im Ruhezustand befindet, das heißt, wenn der Client mit der Berechnung oder Speicherung von Daten beschäftigt ist, entscheidet sich MySQL für eine bedingte Wartezeit. Während der Datenpaketverteilung hat der Client möglicherweise keine Zeit zu antworten (das Senden, Empfangen oder Verarbeiten des Datenpakets ist zu langsam). Um sicherzustellen, dass die Verbindung nicht durch endloses Warten verschwendet wird, trennt MySQL die Verbindung auch bedingt aktiv (net_read_timeout und net_write_timeout).

siehe:

http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html

Oben finden Sie eine detaillierte Zusammenfassung von MySQL und verbindungsbezogenen Timeouts. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht oder diskutieren Sie in der Community. Vielen Dank fürs Lesen und ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Unterschied zwischen interactive_timeout und wait_timeout in MySQL
  • C3P0-Verbindungspool + MySQL-Konfiguration und Lösung des Wait_Timeout-Problems
  • Ein Clusterproblem, das durch den MySQL-Parameter slave_net_timeout gelöst wird

<<:  So verwenden Sie die Form-Komponente von Antd in React, um Formularfunktionen zu implementieren

>>:  Erläuterung zur Verwendung und Änderung des Standard-Programmveröffentlichungspfads von Tomcat

Artikel empfehlen

Docker verpackt das lokale Image und stellt es auf anderen Maschinen wieder her

1. Verwenden Sie Docker-Images, um alle Image-Dat...

Eine SQL-Anweisung schließt die MySQL-Deduplizierung ab und behält eine

Als ich vor einigen Tagen an einer Anforderung ar...

Häufig gestellte Fragen zu Docker

Docker ordnet Ports nur IPv6 zu, nicht aber IPv4 ...

Docker installiert ClickHouse und initialisiert den Datentest

Clickhouse-Einführung ClickHouse ist ein spalteno...

HTML-Auszeichnungssprache - Referenz

Klicken Sie hier, um zum Abschnitt „HTML-Tutorial“...

React + Threejs + Swiper vollständiger Code zum Erzielen eines Panoramaeffekts

Schauen wir uns den Panorama-Effekt an: Adresse a...

Einfaches Beispiel zum Hinzufügen und Entfernen von HTML-Knoten

Einfaches Beispiel für das Hinzufügen und Entfern...

Problem mit der Parameterübergabe beim Sprung auf HTML-Seite

Die Wirkung ist wie folgt: eine Seite Nach dem Kl...

Diagramm des Installations- und Verwendungstutorials für MySQL 8.0.17

Vorne geschrieben In der Vergangenheit und in akt...

Detaillierte Schritte zum Starten des Django-Projekts mit nginx+uwsgi

Wenn wir ein Webprojekt mit Django entwickeln, wi...