Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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:
-
loginTimeoutes el número de segundos que el controlador espera para establecer una conexión con el servidor. Si pasa este tiempo, el controlador devuelve un error y no abre la conexión. Un valor cero establece el tiempo de espera al tiempo de espera predeterminado del sistema, que es de 30 segundos en el controlador JDBC 11.2 y versiones posteriores. En el controlador JDBC 10.2 y versiones anteriores, el tiempo de espera por defecto es de 15 segundos. Cualquier valor distinto de cero establece el número de segundos que el controlador espera antes de dar por caducada una conexión fallida. Si tienes problemas constantes para establecer una conexión con el controlador JDBC, puede que necesites aumentar este tiempo de espera a 90 o incluso 120 segundos.loginTimeouttambién limita los reintentos de conexión del driver, no solo un único intento, lo cual es importante cuando te conectas a una base de datos de Azure SQL Database sin servidor que se pausa automáticamente. Para más información, consulte Conexión a una base de datos sin servidor en pausa automática.
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.
-
queryTimeoutes 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. -
cancelQueryTimeoutes el tiempo, en segundos, que el controlador espera a recibir una confirmación de laqueryTimeoutcancelación por parte del servidor, antes de terminar o cerrar la conexión de forma forzada. Es decir, el controlador espera la cantidad total decancelQueryTimeoutmásqueryTimeoutsegundos, 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. -
lockTimeoutes 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. -
socketTimeoutse 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 desocketTimeoutantes 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 quesocketTimeoutes mayor quequeryTimeoutpara evitar excepciones de tiempo de espera de socket durante la ventanaqueryTimeout. De forma similar, asegúrese de quesocketTimeoutes mayor quecancelQueryTimeoutpara evitar excepciones de tiempo de espera de socket durante la ventanacancelQueryTimeout.
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 operación de la base de datos que se está realizando. Por ejemplo, para una SELECT sentencia, la decisión puede ser informar de un error al usuario, o puede ser reconectar y volver a intentarlo. Para las afirmaciones INSERT o UPDATE, esa decisión podría 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 de espera en una operación de lectura o escritura en un socket. | Cero [tiempo de espera infinito] | Conexión cerrada |