Grundlegendes zu Timeouteigenschaften im JDBC-Treiber
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 desqueryTimeout
-Abbruchs vom Server wartet, bevor er die Verbindung gewaltsam beendet/schließt. Das heißt, der Treiber wartet insgesamtcancelQueryTimeout
plusqueryTimeout
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 vonsocketTimeout
, 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, dasssocketTimeout
größer alsqueryTimeout
ist, um die Socket-Zeitüberschreitungsausnahmen während desqueryTimeout
-Fensters zu vermeiden. Ebenso müssen Sie sicherstellen, dasssocketTimeout
größer alscancelQueryTimeout
ist, um Socket-Zeitüberschreitungsausnahmen während descancelQueryTimeout
-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 |