Informazioni sulle proprietà di timeout nel driver JDBC

Scaricare il driver JDBC

Le impostazioni di timeout nel driver JDBC possono essere usate per dare priorità alla reattività dell'applicazione. Per impostazione predefinita, la maggior parte dei timeout del driver assegna priorità all'attesa di un risultato per garantire la coerenza dei dati. Assicurarsi di scegliere i timeout appropriati per le esigenze dell'applicazione.

Per la connessione iniziale, loginTimeout viene usato:

  • loginTimeout è la quantità di tempo, in secondi, che il driver attende per stabilire una connessione al server. Se questo tempo viene superato, viene restituito un errore e non viene stabilita alcuna connessione aperta. Un valore uguale a zero indica che il timeout è quello predefinito di sistema, ovvero 30 secondi nelle versioni 11.2 e successive. Per le versioni 10.2 e successive, il timeout predefinito è 15 secondi. Un valore diverso da zero indica il numero di secondi che il driver deve attendere prima del timeout di una connessione non riuscita. Se si verificano problemi di connessione con il driver JDBC, potrebbe essere necessario aumentare questo timeout a 90 o anche 120 secondi.

Dopo aver stabilito la connessione, queryTimeout, cancelQueryTimeout e lockTimeout vengono usati durante le esecuzioni di istruzioni. socketTimeout viene utilizzato per qualsiasi comunicazione del driver con il server.

  • queryTimeout è il tempo, in secondi, che il driver attenderà, dopo l'invio di un comando di esecuzione al server, per ricevere una risposta dal server con i dati. Se questo tempo viene superato, il comando viene annullato. Il superamento di questo timeout non chiude la connessione. Il valore predefinito è -1 che indica un timeout infinito.
  • cancelQueryTimeout è il tempo, in secondi, che il driver attende per la conferma dell'annullamento di queryTimeout dal server, prima di terminare/chiudere forzatamente la connessione. Ovvero, il driver attende la quantità totale di cancelQueryTimeout più queryTimeout secondi prima che la connessione venga chiusa. L'impostazione di questo timeout su un valore diverso da zero garantisce che le applicazioni possano rimanere reattive in caso di errore di rete o comunicazione con il server, quando si verifica il timeout di una query. Il valore predefinito per questa proprietà è -1, ovvero un tempo di attesa infinito.
  • lockTimeout è il tempo di attesa per il rilascio di un blocco, nei casi in cui è presente un blocco che blocca l'esecuzione dell'istruzione. Il superamento di questo timeout non comporta la chiusura della connessione. Il valore predefinito per questa proprietà è -1, ovvero un tempo di attesa infinito.
  • socketTimeout si applica a tutte le comunicazioni socket con il server. Se il server interrompe la comunicazione con il driver, non riconoscendo o rispondendo ai dati, il driver attende il valore di socketTimeout prima che chiuda la connessione. Se si imposta questo timeout su un valore diverso da zero, le applicazioni possono rimanere reattive in caso di errore di rete o comunicazione con il server. Il valore predefinito è 0, che indica un timeout infinito. Assicurarsi che socketTimeout sia maggiore di queryTimeout per evitare eccezioni di timeout del socket durante la finestra queryTimeout. Analogamente, assicurarsi che socketTimeout sia maggiore di cancelQueryTimeout per evitare eccezioni di timeout del socket durante la finestra cancelQueryTimeout.

I valori di timeout ragionevoli per l'applicazione dipendono dalle priorità dell'applicazione. L'impostazione di valori inferiori per i timeout assegna priorità alla reattività dell'applicazione rispetto alla coerenza dei dati. Quando vengono raggiunti i timeout, le applicazioni devono decidere il miglior corso di azione. Tale decisione si basa sull'azione del database che viene eseguita. Ad esempio, per un'istruzione SELECT, la decisione potrebbe essere quella di segnalare un errore all'utente oppure di riconnettersi e riprovare. Per le istruzioni INSERT o UPDATE, tale decisione può essere diversa.

Per un'applicazione reattiva, loginTimeout e queryTimeout dovrebbero essere impostati su valori relativamente bassi. Analogamente, anche cancelQueryTimeout dovrebbe essere impostato su un valore basso per garantire che il driver non attenda troppo a lungo affinché il server riconosca l'annullamento della query, quando viene superato un queryTimeout. Infine, socketTimeout dovrebbe essere impostato per evitare che il driver attenda troppo a lungo durante qualsiasi scenario in cui la connettività al server viene interrotta (interruzione della rete, arresto anomalo del server e così via).

Riepilogo delle proprietà

Proprietà Descrizione Default Risultato della connessione
loginTimeout Numero di secondi di attesa del driver prima del timeout di una connessione non riuscita. 30 secondi [11.2 e versioni successive],
altrimenti, 15 secondi
Connessione chiusa
queryTimeout Il numero di secondi di attesa prima di annullare una query. -1 [timeout infinito] Connessione aperta
cancelQueryTimeout Il numero di secondi di attesa per la conferma dell'annullamento di QueryTimeout. -1 [timeout infinito] Connessione chiusa
lockTimeout Il numero di millisecondi da attendere prima che il database restituisca un errore di timeout del blocco. -1 [timeout infinito] Connessione aperta
socketTimeout Il numero di millisecondi di attesa per la lettura o la scrittura di un socket. Zero [timeout infinito] Connessione chiusa

Vedi anche

Impostazione delle proprietà delle connessioni