Partilhar via


Compreender as propriedades de tempo limite no driver JDBC

Baixar driver JDBC

As definições de tempo limite no driver JDBC podem ser usadas para priorizar a resposta da aplicação. Por padrão, a maioria dos tempos limites do driver prioriza esperar por um resultado para assegurar a consistência dos dados. Certifique-se de escolher prazos de espera adequados às necessidades da sua candidatura.

Para a ligação inicial, loginTimeout utiliza-se:

  • loginTimeout é o tempo, em segundos, que o condutor espera para estabelecer uma ligação ao servidor. Se este valor for ultrapassado, é devolvido um erro e não se estabelece nenhuma ligação aberta. Um valor de zero indica que o timeout é o timeout padrão do sistema, que é de 30 segundos nas versões 11.2 e superiores. Para as versões 10.2 e inferiores, o tempo limite padrão é de 15 segundos. Qualquer valor diferente de zero é o número de segundos que o condutor deve esperar antes de esgotar uma ligação falhada. Se estiver sempre com dificuldades em estabelecer uma ligação com o driver JDBC, pode ser necessário aumentar este tempo para 90, ou até 120, segundos.

Uma vez estabelecida a ligação, queryTimeout, cancelQueryTimeout, e lockTimeout são usados durante execuções de instruções. socketTimeout é usado para qualquer comunicação do driver com o servidor.

  • queryTimeout é o tempo, em segundos, em que o condutor aguarda, após enviar um comando execute ao servidor, para receber uma resposta do servidor com dados. Se este tempo for ultrapassado, o comando é cancelado. Ultrapassar este timeout não fecha a ligação. O valor padrão é -1, o que significa tempo limite infinito.
  • cancelQueryTimeout é o tempo, em segundos, que o condutor espera por uma confirmação de cancelamento pelo servidor, antes de terminar ou fechar à força a ligação. Ou seja, o condutor espera o total de cancelQueryTimeout mais queryTimeout segundos antes de a ligação ser fechada. Definir este timeout para um valor diferente de zero garante que as aplicações podem manter-se responsivas caso haja falha de rede ou comunicação com o servidor, quando uma consulta já esgotou o tempo. O valor padrão desta propriedade é -1, que é um tempo de espera infinito.
  • lockTimeout é o tempo de espera para que um bloqueio seja libertado, nos casos em que há uma instrução cujo execução é bloqueada por um bloqueio. Ultrapassar este timeout não resulta numa ligação fechada. O valor padrão desta propriedade é -1, que é um tempo de espera infinito.
  • socketTimeout Aplica-se a todas as comunicações por socket com o servidor. Se o servidor interromper a comunicação com o driver, seja por não reconhecer ou responder aos dados, o driver espera pelo valor de socketTimeout antes de fechar a ligação. Definir este timeout para um valor diferente de zero garante que as aplicações possam continuar responsivas caso haja falhas de rede ou de comunicação com o servidor. O valor padrão é 0, o que significa um tempo limite infinito. Certifique-se de que socketTimeout seja maior que queryTimeout para evitar exceções de timeout no socket durante a janela de tempo queryTimeout. Da mesma forma, garantir que socketTimeout é maior do que cancelQueryTimeout para evitar exceções de timeout do soquete durante a janela cancelQueryTimeout.

Valores razoáveis de timeout para a sua aplicação dependem das prioridades da sua aplicação. Definir valores mais baixos para timeouts prioriza a resposta da aplicação em detrimento da consistência dos dados. Quando os limites de tempo são atingidos, as aplicações precisam de decidir a melhor ação a tomar. Essa decisão baseia-se na ação da base de dados que está a ser realizada. Por exemplo, para uma SELECT instrução, a decisão pode ser reportar um erro ao utilizador, ou pode ser reconectar e tentar novamente. Para INSERT ou UPDATE declarações, essa decisão pode ser diferente.

Para uma aplicação responsiva, loginTimeout e queryTimeout devem ser definidos para valores relativamente baixos. De forma semelhante, cancelQueryTimeout deve também ser definido para um valor baixo para garantir que o driver não espere demasiado tempo para o servidor reconhecer o cancelamento da consulta, quando o queryTimeout é ultrapassado. Por fim, socketTimeout deve ser definido para evitar que o driver espere demasiado tempo em qualquer cenário em que a ligação ao servidor seja interrompida (interrupção de rede, crash do servidor, etc.).

Resumo da propriedade

Propriedade Description Predefinido Resultado da ligação
loginTimeout O número de segundos que o controlador deve esperar antes de interromper uma conexão com falha. 30 segundos [11,2+],
caso contrário, 15 segundos
Ligação fechada
queryTimeout O número de segundos a esperar antes de cancelar uma consulta. -1 [Tempo final infinito] Ligação aberta
cancelQueryTimeout O número de segundos para aguardar um reconhecimento do cancelamento do QueryTimeout. -1 [Tempo final infinito] Ligação fechada
lockTimeout O número de milissegundos a esperar antes da base de dados retornar um erro de tempo limite de bloqueio. -1 [Tempo final infinito] Ligação aberta
socketTimeout O número de milissegundos de espera numa leitura ou escrita do soquete. Zero [Tempo limite infinito] Ligação fechada

Consulte também

Definindo as propriedades da conexão