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

Zusammenfassung der XHTML-Anwendung im Webdesign-Studium

<br />Im Allgemeinen ist die Dateiorganisati...

CSS3 implementiert den Beispielcode der NES-Spielekonsole

Ergebnisse erzielenImplementierungscode html <...

So implementieren Sie Linux Deepin, um redundante Kernel zu löschen

Im vorherigen Artikel wurde beschrieben, wie man ...

So ändern Sie die Master-Slave-Replikationsoptionen in MySQL online

Vorwort: Die am häufigsten verwendete Architektur...

Tutorial zur manuellen Installation von MySQL 8.0.13

In diesem Artikel finden Sie das Tutorial zur man...

Vue verwendet Mixins zur Optimierung von Komponenten

Inhaltsverzeichnis Mixins-Implementierung Zusamme...

Grafische Schritte zur Zabbix-Überwachung des VMware Exsi-Hosts

1. Rufen Sie das Virtualisierungscenter auf, meld...

Lernen Sie MySQL Index Pushdown in fünf Minuten

Inhaltsverzeichnis Vorwort Was ist Index-Pushdown...

Unicode-Signatur-BOM-Problem (Byte Order Mark) für UTF-8-Dateien

Beim Debuggen einer chinesischen Zen Cart-Website...

So zeigen Sie die Ausführungszeit von SQL-Anweisungen in MySQL an

Inhaltsverzeichnis 1. Erste SQL-Vorbereitung 2. M...