Partager via


Présentation des propriétés de délai d’attente dans le pilote JDBC

Télécharger le pilote JDBC

Les paramètres de délai d’attente dans le pilote JDBC peuvent être utilisés pour hiérarchiser la réactivité des applications. Par défaut, la plupart des délais d’attente du pilote donnent la priorité à l’attente d’un résultat pour garantir la cohérence des données. Veillez à choisir des délais d’attente adaptés aux besoins de votre application.

Pour la connexion initiale, loginTimeout est utilisé :

  • loginTimeout est la durée pendant laquelle, en secondes, le pilote attend pour établir une connexion au serveur. Si la durée est dépassée, une erreur est retournée et aucune connexion ouverte n’est établie. La valeur zéro indique que le délai d’attente correspond au délai d’attente système par défaut, lequel est de 30 secondes dans les versions 11.2 et ultérieures. Pour les versions 10.2 et antérieures, le délai d’attente par défaut est de 15 secondes. Toute valeur différente de zéro correspond au nombre de secondes que le pilote doit attendre avant l’expiration d’une connexion échouée. Si vous rencontrez systématiquement des difficultés pour établir une connexion avec le pilote JDBC, vous devrez peut-être porter ce délai d’attente à 90, voire 120 secondes.

Une fois la connexion établie, queryTimeout, cancelQueryTimeout et lockTimeout sont utilisés lors des exécutions d’instructions. socketTimeout est utilisé pour toute communication du pilote avec le serveur.

  • queryTimeout est la durée, en secondes, pendant laquelle le pilote attend, après avoir envoyé une commande d’exécution au serveur, que celui-ci lui retourne une réponse avec des données. Si ce délai est dépassé, la commande est annulée. Le dépassement de ce délai d’attente ne ferme pas la connexion. La valeur -1 par défaut signifie un délai infini.
  • cancelQueryTimeout est la durée, en secondes, pendant laquelle le pilote attend un accusé de réception de l’annulation de queryTimeout du serveur, avant de mettre fin à la connexion ou de la fermer de force. Autrement dit, le pilote attend pendant la durée totale de cancelQueryTimeout plus queryTimeout secondes avant que la connexion soit fermée. Le fait de définir ce délai d’attente sur une valeur différente de zéro garantit que les applications peuvent rester réactives en cas de défaillance du réseau ou de la communication avec le serveur, quand une requête est arrivée à expiration. La valeur par défaut de cette propriété est -1, soit un temps d’attente infini.
  • lockTimeout est le délai d’attente avant qu’un verrou soit libéré, dans les cas où un verrou bloque l’exécution d’une instruction. Le dépassement de ce délai d’attente n’entraîne pas de fermeture de connexion. La valeur par défaut de cette propriété est -1, soit un temps d’attente infini.
  • socketTimeout s’applique à toutes les communications de socket avec le serveur. Si le serveur arrête la communication avec le pilote, soit en n’accusant pas réception des données, soit en n’y répondant pas, le pilote attend pendant la durée exprimée par socketTimeout avant de fermer la connexion. La définition de ce délai d’attente sur une valeur différente de zéro garantit que les applications peuvent rester réactives en cas de défaillance du réseau ou de la communication avec le serveur. La valeur 0 par défaut signifie un délai infini. Assurez-vous quesocketTimeout est supérieur à queryTimeout afin d’éviter les exceptions de délai d’expiration du socket pendant la fenêtre queryTimeout. De même, assurez-vous que socketTimeout est supérieur à cancelQueryTimeout afin d’éviter les exceptions de délai d’expiration du socket pendant la fenêtre cancelQueryTimeout.

Les valeurs de délai d’attente raisonnables pour votre application dépendent des priorités de celle-ci. La définition de valeurs inférieures pour les délais d’attente donne la priorité à la réactivité des applications par rapport à la cohérence des données. Quand les délais d’attente sont atteints, les applications doivent décider du meilleur plan d’action. Cette décision est basée sur l’action de base de données en cours d’exécution. Par exemple, pour une instruction SELECT, la décision peut être de signaler une erreur à l’utilisateur ou de se reconnecter et de réessayer. Pour les instructions INSERT ou UPDATE, cette décision peut être différente.

Pour une application réactive, loginTimeout et queryTimeout doit être défini sur des valeurs relativement faibles. De même, cancelQueryTimeout doit également être défini sur une valeur faible pour garantir que le pilote n’attend pas trop longtemps que le serveur accuse réception de l’annulation de la requête, quand un queryTimeout est dépassé. Enfin, socketTimeout doit être défini pour éviter que le pilote n’attende trop longtemps dans tout scénario où la connectivité au serveur est interrompue (interruption réseau, plantage du serveur, etc.).

Récapitulatif des propriétés

Propriété Description Default Résultat pour la connexion
loginTimeout Nombre de secondes que le pilote doit attendre avant l'expiration d'une connexion qui a échoué. 30 secondes [11.2+],
sinon 15 secondes
Fermeture de la connexion
queryTimeout Nombre de secondes à attendre avant d’annuler une requête. -1 [Délai d’attente infini] Ouverture de la connexion
cancelQueryTimeout Nombre de secondes à attendre pour un accusé de réception de l’annulation de QueryTimeout. -1 [Délai d’attente infini] Fermeture de la connexion
lockTimeout Nombre de millisecondes à attendre avant que la base de données ne retourne une erreur d’expiration d’un délai de verrouillage. -1 [Délai d’attente infini] Ouverture de la connexion
socketTimeout Nombre de millisecondes à attendre lors de la lecture ou de l’écriture d’un socket. Zéro [délai d’attente infini] Fermeture de la connexion

Voir aussi

Définition des propriétés de connexion