Beispiel für die Konfiguration der Timeout-Einstellung für MySQL-Datenbanken

Beispiel für die Konfiguration der Timeout-Einstellung für MySQL-Datenbanken

Vorwort

Kürzlich bereitete ich mich auf das Double 11-Shopping-Festival von JD.com vor. Als ich die Timeout-Konfiguration von MySQL konfigurierte, stellte ich fest, dass es viele Stellen gibt, an denen ich sie einstellen kann. Welche Auswirkungen haben so viele Timeout-Konfigurationen und welche Auswirkungen werden die Konfigurationen haben? Lassen Sie es mich im heutigen Artikel analysieren.

1. JDBC-Timeout-Einstellungen

connectTimeout: Gibt das Timeout für das Warten auf den Aufbau einer Socket-Verbindung mit der MySQL-Datenbank an. Der Standardwert ist 0, was bedeutet, dass kein Timeout festgelegt ist. Die Einheit ist Millisekunden. 30000 wird empfohlen.

socketTimeout: Gibt das Wartezeitlimit für das Lesen und Schreiben von Sockets an, nachdem der Client und die MySQL-Datenbank einen Socket eingerichtet haben. Das Standard-SocketTimeout des Linux-Systems beträgt 30 Minuten und kann unverändert bleiben.

2. Timeout-Einstellungen für den Verbindungspool

maxWait: Gibt die Wartezeit an, wenn im Datenbankverbindungspool keine Verbindung verfügbar ist. Der Standardwert ist 0, was unendliches Warten bedeutet. Die Einheit ist Millisekunden. 60000 wird empfohlen.

3. MyBatis-Abfrage-Timeout

defaultStatementTimeout: Gibt das Standard-Abfrage-Timeout in der MyBatis-Konfigurationsdatei in Sekunden an. Wenn nicht festgelegt, gibt es keine Wartezeit.

Wenn einige SQL-Anweisungen länger als das defaultStatementTimeout ausgeführt werden müssen, kann das Timeout einer separaten SQL-Anweisung in der Mapper-Datei konfiguriert werden.

4. Transaktions-Timeout

Mit dem Transaktionstimeout wird das Timeout der Transaktionsausführung gesteuert. Die Ausführungszeit ist die Summe aller Codeausführungen innerhalb der Transaktion in Sekunden.

Zusammenfassen

Das Timeout auf höherer Ebene hängt vom Timeout auf niedrigerer Ebene ab. Nur wenn das Timeout auf niedrigerer Ebene korrekt ist, kann garantiert werden, dass das Timeout auf höherer Ebene normal ist. Wenn beispielsweise das Socket-Timeout fehlschlägt, werden sowohl das High-Level-Anweisungs-Timeout als auch das Transaktions-Timeout ungültig.

1. Transaktions-Timeout

Die von Spring bereitgestellte Konfiguration des Transaktions-Timeouts ist sehr einfach. Sie zeichnet die Startzeit und die Verbrauchszeit jeder Transaktion auf. Wenn ein bestimmtes Ereignis eintritt, wird die Verbrauchszeit überprüft. Wenn der Timeout-Wert überschritten wird, wird eine Ausnahme ausgelöst.

Angenommen, eine Transaktion enthält 5 Anweisungen, die Ausführungszeit jeder Anweisung beträgt 200 ms und die Ausführungszeit der übrigen Geschäftslogik beträgt 100 ms. Dann sollte das Transaktions-Timeout auf mindestens 1.100 ms (200 * 5 + 100) eingestellt werden.

2. Anweisungs-Timeout

Mit dem Anweisungstimeout wird die Ausführungszeit einer Anweisung begrenzt. Der Timeout-Wert wird durch Aufrufen der JDBC-API java.sql.Statement.setQueryTimeout(int timeout) festgelegt. Allerdings legen Entwickler diese mittlerweile nur noch selten direkt im Code fest, sondern meist über das Framework.

In iBatis kann der Standardwert des Anweisungs-Timeouts über das Attribut defaultStatementTimeout in sql-map-config.xml festgelegt werden. Gleichzeitig können Sie auch das Timeout-Attribut der Select-, Insert- und Update-Tags in SQLMap festlegen, um das Timeout verschiedener SQL-Anweisungen unabhängig zu konfigurieren.

3. Socket-Timeout

Das JDBC-Socket-Timeout ist sehr wichtig, wenn die Datenbank plötzlich gestoppt wird oder ein Netzwerkfehler auftritt (aufgrund eines Gerätefehlers usw.). Aufgrund der Struktur von TCP/IP kann der Socket keine Netzwerkfehler erkennen. Die Anwendung kann daher nicht aktiv feststellen, dass die Datenbankverbindung getrennt ist. Wenn das Socket-Timeout nicht festgelegt ist, wartet die Anwendung unbegrenzt, bevor die Datenbank das Ergebnis zurückgibt. Diese Verbindung wird als tote Verbindung bezeichnet.

Um tote Verbindungen zu vermeiden, muss der Socket über eine Timeout-Konfiguration verfügen. Das Socket-Timeout kann über JDBC eingestellt werden. Das Socket-Timeout kann verhindern, dass die Anwendung bei einem Netzwerkfehler endlos wartet, und so die Dienstausfallzeit verkürzen.

Es wird nicht empfohlen, Socket-Timeout zu verwenden, um die Ausführungszeit einer Anweisung zu begrenzen. Daher muss der Socket-Timeout-Wert höher sein als der Anweisungs-Timeout-Wert. Andernfalls wird der Socket-Timeout-Wert zuerst wirksam, wodurch der Anweisungs-Timeout-Wert bedeutungslos und wirkungslos wird.

Dies ist das Ende dieses Artikels über die Timeout-Einstellungen und -Konfiguration der MySQL-Datenbank. Weitere relevante Inhalte zu den Timeout-Einstellungen und -Konfigurationen der MySQL-Datenbank finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den verwandten Artikeln weiter unten. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So führen Sie MySQL in einer Docker-Umgebung aus und aktivieren Binlog, um die Master-Slave-Synchronisierung zu konfigurieren
  • MySQL-Datenbank-Backup-Einstellung: verzögerte Backup-Methode (MySQL Master-Slave-Konfiguration)
  • MySQL verwendet Indizes zur Leistungsoptimierung
  • MySQL optimiert die Datenbankleistung durch die Anzeige des Status und die Erläuterung der Analyse
  • Einführung in die Leistungsoptimierung von MySQL-Datenbanken
  • Detaillierte Erklärung der GaussDB zur MySQL-Leistungsoptimierung
  • MySQL-Konfigurationsverbindungsparametereinstellungen und Leistungsoptimierung

<<:  Schritte zum Upgrade von CentOS6 auf Glibc

>>:  Geben Sie die Stildatei für die automatische Suchvorschlagsfunktion ein: suggestions.css

Artikel empfehlen

Detaillierte Erläuterung der CSS-Randüberlappung und Lösungssuche

Ich habe kürzlich einige CSS-bezogene Wissenspunk...

Einführung in die Verwendung von Ankern (benannte Anker) in HTML-Webseiten

Die folgenden Informationen sind aus dem Internet ...

Eine kurze Diskussion über allgemeine Operationen von MySQL in cmd und Python

Umgebungskonfiguration 1: Installieren Sie MySQL ...

Popularisierung der Theorie – Benutzererfahrung

1. Konzeptanalyse 1: UE User Experience <br /&...

So schreiben Sie eleganten JS-Code

Inhaltsverzeichnis Variable Verwenden Sie aussage...

So legen Sie Remotezugriffsberechtigungen in MySQL 8.0 fest

Im vorherigen Artikel wurde erklärt, wie man das ...

Öffnen Sie den Windows-Server-Port (nehmen Sie als Beispiel Port 8080)

Was ist ein Port? Bei den Ports, auf die wir uns ...

MySQL-Fremdschlüsseleinschränkung (FOREIGN KEY) Fallerklärung

Die MySQL-Fremdschlüsseleinschränkung (FOREIGN KE...

So implementieren Sie Reaktionsfähigkeit beim Lernen des Vue-Quellcodes

Inhaltsverzeichnis Vorwort 1. Schlüsselelemente e...

JavaScript zur Implementierung der Funktion zum Ändern des Avatars

In diesem Artikel wird der spezifische JavaScript...