Descripción de las propiedades de tiempo de espera en el controlador JDBC

Descargar controlador JDBC

La configuración del tiempo de espera del controlador JDBC se puede usar para priorizar la capacidad de respuesta de la aplicación. De forma predeterminada, la mayoría de los tiempos de espera del controlador priorizan la espera de un resultado para garantizar la coherencia de los datos. Asegúrese de elegir los tiempos de espera adecuados para las necesidades de la aplicación.

Para la conexión inicial, se usa loginTimeout:

  • loginTimeout es la cantidad de tiempo, en segundos, que el controlador espera para establecer una conexión con el servidor. Si se supera esta cantidad, se devuelve un error y no se establece ninguna conexión abierta. Un valor cero indica que el tiempo de espera es el predeterminado del sistema, que es de 30 segundos en la versión 11.2 y versiones posteriores. En la versión 10.2 y versiones inferiores, el tiempo de espera predeterminado es de 15 segundos. Cualquier valor diferente a cero es el número de segundos que debería esperar el controlador antes de agotar el tiempo de espera de una conexión errónea. Si tiene problemas para establecer una conexión con el controlador JDBC de forma constante, es posible que tenga que aumentar este tiempo de espera a 90 o incluso 120 segundos.

Una vez establecida la conexión, queryTimeout, cancelQueryTimeout y lockTimeout se usan durante las ejecuciones de instrucciones. socketTimeout se usa para cualquier comunicación del controlador con el servidor.

  • queryTimeout es el tiempo, en segundos que esperará el controlador, después de enviar un comando execute al servidor, para recibir una respuesta del servidor con datos. Si se supera este tiempo, se cancela el comando. Superar este tiempo de espera no hace que se cierre la conexión. El valor predeterminado es -1, lo que significa que el tiempo de espera es infinito.
  • cancelQueryTimeout es el tiempo, en segundos, que espera el controlador una confirmación de la cancelación de queryTimeout del servidor, antes de finalizar o cerrar la conexión de forma forzada. Es decir, el controlador espera la cantidad total de cancelQueryTimeout más queryTimeout segundos, antes de cerrarse la conexión. Establecer este tiempo de espera en un valor distinto de cero garantiza que las aplicaciones puedan seguir respondiendo si hay un error de red o de comunicación con el servidor, una vez superado el tiempo de espera de una consulta. El valor predeterminado de esta propiedad es -1, que es un tiempo de espera infinito.
  • lockTimeout es la cantidad de tiempo que hay que esperar para que se libere un bloqueo, en aquellos casos en los que hay un bloqueo en la ejecución de instrucciones. Superar este tiempo de espera no da como resultado una conexión cerrada. El valor predeterminado de esta propiedad es -1, que es un tiempo de espera infinito.
  • socketTimeout se aplica a todas las comunicaciones de socket con el servidor. Si el servidor detiene la comunicación con el controlador, ya sea no confirmando los datos o no respondiendo a estos, el controlador espera el valor de socketTimeout antes de cerrar la conexión. Establecer este tiempo de espera en un valor distinto de cero garantiza que las aplicaciones puedan seguir respondiendo si hay un error de red o de comunicación con el servidor. El valor predeterminado es 0, lo que significa que el tiempo de espera es infinito. Asegúrese de que socketTimeout es mayor que queryTimeout para evitar excepciones de tiempo de espera de socket durante la ventana queryTimeout. De forma similar, asegúrese de que socketTimeout es mayor que cancelQueryTimeout para evitar excepciones de tiempo de espera de socket durante la ventana cancelQueryTimeout.

Los valores de tiempo de espera razonables de la aplicación dependen de las prioridades de esta. Con el establecimiento de valores inferiores para los tiempos de espera se prioriza la capacidad de respuesta de la aplicación sobre la coherencia de los datos. Cuando se alcanzan los tiempos de espera, las aplicaciones deben decidir la mejor forma de actuar. Esa decisión se basa en la acción de la base de datos que se realiza. Por ejemplo, en el caso de una instrucción SELECT, la decisión podría ser notificar un error al usuario o bien conectarse de nuevo y volver a intentarlo. En el caso de las instrucciones INSERT o UPDATE, esa decisión puede ser diferente.

En el caso de una aplicación con capacidad de respuesta, loginTimeout y queryTimeout deben establecerse en valores relativamente bajos. Del mismo modo, cancelQueryTimeout también debe establecerse en un valor bajo a fin de garantizar que el controlador no tenga que esperar demasiado tiempo para que el servidor confirme la cancelación de la consulta, al superarse un valor queryTimeout. Por último, socketTimeout debe establecerse para evitar que el controlador espere demasiado tiempo durante cualquier escenario en el que la conectividad al servidor se haya interrumpido (interrupción de la red, bloqueo del servidor, etc.).

Resumen de propiedades

Propiedad Descripción Valor predeterminado Resultado de conexión
loginTimeout Número de segundos que debería esperar el controlador antes de agotar el tiempo de espera de una conexión errónea. 30 segundos [11.2 y versiones posteriores],
en caso contrario, 15 segundos
Conexión cerrada
queryTimeout Número de segundos de espera antes de cancelar una consulta. -1 [tiempo de espera infinito] Conexión abierta
cancelQueryTimeout Número de segundos de espera para la confirmación de la cancelación de QueryTimeout. -1 [tiempo de espera infinito] Conexión cerrada
lockTimeout Número de milisegundos que hay que esperar antes de que la base de datos devuelva un error de tiempo de espera de bloqueo. -1 [tiempo de espera infinito] Conexión abierta
socketTimeout Número de milisegundos que hay que esperar en una lectura o escritura de socket. Cero [tiempo de espera infinito] Conexión cerrada

Consulte también

Establecimiento de las propiedades de conexión