Freigeben über


Grundlegendes zu Timeouteigenschaften im JDBC-Treiber

JDBC-Treiber herunterladen

Timeouteinstellungen im JDBC-Treiber können verwendet werden, um die Reaktionsfähigkeit der Anwendung zu priorisieren. Standardmäßig priorisieren die meisten Timeouts des Treibers das Warten auf ein Ergebnis, um die Datenkonsistenz sicherzustellen. Stellen Sie sicher, dass Sie Timeouts auswählen, die den Anforderungen Ihrer Anwendung entsprechen.

Für die erste Verbindung wird loginTimeout verwendet:

  • loginTimeout ist die Zeitspanne in Sekunden, die der Treiber wartet, um eine Verbindung mit dem Server herzustellen. Wenn diese Zeit überschritten wird, wird ein Fehler zurückgegeben, und es wird keine offene Verbindung hergestellt. Mit dem Wert 0 wird angegeben, dass das Timeout das Standardsystemtimeout ist, das in den Versionen ab 11.2 auf 30 Sekunden festgelegt ist. Für Versionen bis 10.2 beträgt das Standardtimeout 15 Sekunden. Jeder Wert ungleich 0 gibt die Wartezeit in Sekunden an, bevor der Treiber bei einem Verbindungsfehler ein Timeout meldet. Wenn Sie ständig Probleme beim Herstellen einer Verbindung mit dem JDBC-Treiber haben, müssen Sie dieses Timeout möglicherweise auf 90 oder sogar 120 Sekunden erhöhen.

Sobald die Verbindung hergestellt wurde, werden queryTimeout, cancelQueryTimeout und lockTimeout während der Anweisungsausführungen verwendet. socketTimeout wird für jegliche Treiberkommunikation mit dem Server verwendet.

  • queryTimeout ist die Zeit in Sekunden, die der Treiber wartet, nachdem er einen Ausführungsbefehl an den Server gesendet hat, um eine Antwort vom Server mit Daten zu erhalten. Wenn diese Zeit überschritten wird, wird der Befehl abgebrochen. Das Überschreiten dieses Timeouts schließt die Verbindung nicht. Der Standardwert lautet „-1“, d. h. ein unendliches Timeout.
  • cancelQueryTimeout ist die Zeit in Sekunden, die der Treiber auf eine Bestätigung des queryTimeout-Abbruchs vom Server wartet, bevor er die Verbindung gewaltsam beendet/schließt. Das heißt, der Treiber wartet insgesamt cancelQueryTimeout plus queryTimeout Sekunden, bevor die Verbindung geschlossen wird. Durch Festlegen dieses Timeouts auf einen Wert ungleich 0 wird sichergestellt, dass Anwendungen reaktionsfähig bleiben können, wenn ein Netzwerk- oder Kommunikationsfehler mit dem Server auftritt und ein Timeout für eine Abfrage aufgetreten ist. Der Standardwert für diese Eigenschaft ist -1, was einer unendlichen Wartezeit entspricht.
  • lockTimeout ist die Zeitspanne, die in Fällen, in denen eine Blockierungsanweisung ausgeführt wird, auf das Freigeben einer Sperre gewartet werden muss. Das Überschreiten dieses Timeouts führt nicht zu einer geschlossenen Verbindung. Der Standardwert für diese Eigenschaft ist -1, was einer unendlichen Wartezeit entspricht.
  • socketTimeout gilt für die gesamte Socketkommunikation mit dem Server. Wenn der Server die Kommunikation mit dem Treiber beendet, indem er Daten nicht bestätigt oder antwortet, wartet der Treiber auf den Wert von socketTimeout, bevor er die Verbindung schließt. Durch Festlegen dieses Timeouts auf einen Wert ungleich 0 wird sichergestellt, dass Anwendungen reagieren können, wenn ein Netzwerk- oder Kommunikationsfehler mit dem Server auftritt. Der Standardwert ist 0, d. h. ein unendliches Timeout. Stellen Sie sicher, dass socketTimeout größer als queryTimeout ist, um die Socket-Zeitüberschreitungsausnahmen während des queryTimeout-Fensters zu vermeiden. Ebenso müssen Sie sicherstellen, dass socketTimeout größer als cancelQueryTimeout ist, um Socket-Zeitüberschreitungsausnahmen während des cancelQueryTimeout-Fensters zu vermeiden.

Angemessene Timeoutwerte für Ihre Anwendung hängen von den Prioritäten der Anwendung ab. Das Festlegen niedrigerer Werte für Timeouts priorisiert die Reaktionsfähigkeit der Anwendung gegenüber der Datenkonsistenz. Wenn Timeouts erreicht werden, müssen Anwendungen entscheiden, welche Vorgehensweise am besten ist. Diese Entscheidung basiert auf der ausgeführten Datenbankaktion. Für eine SELECT-Anweisung kann die Entscheidung beispielsweise darin bestehen, dem Benutzer einen Fehler zu melden, oder die Verbindung erneut herzustellen und es erneut zu versuchen. Für INSERT- oder UPDATE-Aussagen kann diese Entscheidung abweichen.

Für eine reaktionsfähige Anwendung sollten loginTimeout und queryTimeout auf relativ niedrige Werte festgelegt werden. Ebenso sollte auch cancelQueryTimeout auf einen niedrigen Wert festgelegt werden, um sicherzustellen, dass der Treiber nicht zu lange wartet, bis der Server den Abbruch der Abfrage bestätigt, wenn ein queryTimeout überschritten wird. Schließlich sollte socketTimeout so festgelegt werden, dass der Treiber während eines Szenarios, in dem die Verbindung mit dem Server unterbrochen ist (Netzwerkunterbrechung, Serverabsturz usw.), nicht zu lange wartet.

Eigenschaftenzusammenfassung

Eigenschaft BESCHREIBUNG Standard Verbindungsergebnis
loginTimeout Die Wartezeit in Sekunden, bevor der Treiber bei einem Verbindungsfehler ein Timeout meldet. 30 Sekunden [11.2+],
andernfalls 15 Sekunden
Geschlossene Verbindung
queryTimeout Die Wartezeit in Sekunden, nach der eine Abfrage abgebrochen wird. -1 [unendliches Timeout] Offene Verbindung
cancelQueryTimeout Die Wartezeit in Sekunden, die auf eine Bestätigung des QueryTimeout-Abbruchs gewartet werden soll. -1 [unendliches Timeout] Geschlossene Verbindung
lockTimeout Die Wartezeit in Millisekunden, bevor die Datenbank einen Sperrtimeoutfehler zurückgibt. -1 [unendliches Timeout] Offene Verbindung
socketTimeout Die Wartezeit in Millisekunden auf einen Lese- oder Schreibvorgang am Socket. Null [unendliches Timeout] Geschlossene Verbindung

Siehe auch

Festlegen von Verbindungseigenschaften