Entender as propriedades de tempo limite no driver JDBC

Baixar Driver JDBC

As configurações de tempo limite no driver JDBC podem ser usadas para priorizar a capacidade de resposta do aplicativo. Por padrão, a maioria dos tempos limite do driver prioriza a espera de um resultado para garantir a consistência dos dados. Escolha tempos limite apropriados para as necessidades do aplicativo.

Para a conexão inicial, loginTimeout é usado:

  • loginTimeout é o tempo, em segundos, que o driver espera para estabelecer uma conexão com o servidor. Se esse valor for excedido, um erro será retornado e nenhuma conexão aberta será estabelecida. Um valor zero indica que o tempo limite é o tempo limite padrão do sistema, que é de 30 segundos na versão 11.2 e em versões superiores. Para a versão 10.2 e as versões anteriores, o tempo limite padrão é de 15 segundos. Qualquer valor diferente de zero é o número de segundos que o driver deve esperar antes de expirar uma conexão com falha. Se você tiver problemas constantemente para estabelecer uma conexão com o driver JDBC, tente aumentar esse tempo limite para 90 ou até 120 segundos.

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

  • queryTimeout é o tempo, em segundos, que o driver aguardará, após o envio de um comando de execução ao servidor, por uma resposta dele com os dados. Se esse tempo for excedido, o comando será cancelado. Exceder esse tempo limite não encerra a conexão. O valor padrão é -1, que significa tempo limite infinito.
  • cancelQueryTimeout é o tempo, em segundos, que o driver espera por uma confirmação do cancelamento de queryTimeout do servidor, antes de encerrar/fechar a conexão à força. Isso significa que o driver espera o total de cancelQueryTimeout mais queryTimeout segundos antes de encerrar a conexão. Definir esse tempo limite para um valor diferente de zero garante que os aplicativos possam permanecer responsivos em caso de falha na rede ou na comunicação com o servidor quando uma consulta atinge o tempo limite. O valor padrão para esta propriedade é -1, que é um tempo de espera infinito.
  • lockTimeout é o tempo de espera para liberar um bloqueio, nos casos em que há uma execução de instrução de bloqueio. Exceder esse tempo limite não resulta em encerramento de conexão. O valor padrão para esta propriedade é -1, que é um tempo de espera infinito.
  • socketTimeout aplica-se a todas as comunicações de soquete com o servidor. Se o servidor interromper a comunicação com o driver, seja por não reconhecer ou não responder aos dados, o driver aguardará o valor de socketTimeout antes de encerrar a conexão. Definir esse tempo limite para um valor diferente de zero garante que os aplicativos possam permanecer responsivos em caso de falha na rede ou na comunicação com o servidor. O valor padrão é 0, que significa tempo limite infinito. Verifique se socketTimeout é maior do que queryTimeout para evitar exceções de tempo limite de soquete durante a janela queryTimeout. De forma similar, verifique se socketTimeout é maior do que cancelQueryTimeout para evitar exceções de tempo limite de soquete durante a janela cancelQueryTimeout.

Os valores de tempo limite adequados para o aplicativo dependem das prioridades dele. Definir valores de tempo limite mais baixos prioriza a capacidade de resposta do aplicativo, em vez de a consistência dos dados. Quando o tempo limite é atingido, os aplicativos precisam decidir o melhor curso de ação. Essa decisão é baseada na ação do banco de dados que está sendo executada. Por exemplo, para uma instrução SELECT, a decisão pode ser relatar um erro ao usuário ou reconectar e tentar novamente. Para as instruções INSERT ou UPDATE, essa decisão pode ser diferente.

Para um aplicativo responsivo, loginTimeout e queryTimeout devem ser definidos com valores relativamente baixos. Da mesma forma, cancelQueryTimeout também deve ser definido com um valor baixo a fim de garantir que o driver não espere muito tempo pela confirmação do servidor com relação ao cancelamento da consulta quando um queryTimeout for excedido. Por fim, socketTimeout deve ser definido para evitar que o driver espere muito tempo durante qualquer cenário em que a conectividade com o servidor seja interrompida (interrupção da rede, travamento do servidor etc.).

Resumo da propriedade

Propriedade Descrição Padrão Resultado da conexão
loginTimeout O número de segundos que o driver deve aguardar antes que o tempo limite de uma conexão com falha seja alcançado. 30 segundos [11.2+],
caso contrário, 15 segundos
Conexão encerrada
queryTimeout O número de segundos a aguardar antes de cancelar uma consulta. -1 [tempo limite infinito] Conexão aberta
cancelQueryTimeout O número de segundos para aguardar uma confirmação de cancelamento de QueryTimeout. -1 [tempo limite infinito] Conexão encerrada
lockTimeout O número de milissegundos a aguardar antes que o banco de dados retorne um erro de tempo limite de bloqueio. -1 [tempo limite infinito] Conexão aberta
socketTimeout O número de milissegundos de espera em uma leitura ou gravação de soquete. Zero [tempo limite infinito] Conexão encerrada

Consulte também

Configuração das propriedades de conexão