Configuración de QueryTimeout
Puede configurar un tiempo de espera de consulta en el origen de datos de una aplicación de forma que una sentencia de un lenguaje de consulta estructurado (SQL) se interrumpa si no puede completar la ejecución antes del número de segundos que se ha especificado.
Antes de empezar
Acerca de esta tarea
- webSphereDefaultQueryTimeout establece un tiempo de espera de consulta predeterminado, que es el número de segundos que una sentencia SQL puede ejecutarse antes de que se agote el tiempo de espera. Este valor predeterminado se altera temporalmente durante una transacción JTA (Java™ Transaction API) si la propiedad personalizada syncQueryTimeoutWithTransactionTimeout está habilitada.
- syncQueryTimeoutWithTransactionTimeout utiliza el tiempo restante (si existe) en una transacción JTA como el tiempo de espera de consulta predeterminado para las sentencias SQL.
- el tiempo restante en la transacción JTA actual basado en el valor de tiempo de espera (TM), syncQueryTimeoutWithTransactionTimeout
- el número absoluto de segundos especificado por la configuración, webSphereDefaultQueryTimeout
Procedimiento
Resultados
Ejemplo
statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // se utiliza un tiempo de espera de consulta de 20 segundos
statement.executeUpdate(sqlcommand2); // se utiliza un tiempo de espera de consulta de 20 segundos
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // se utiliza un tiempo de espera de consulta de 30 segundos
// se supone que la operación anterior tardó 5 segundos, tiempo restante = 30 - 5 segundos
statement.executeUpdate(sqlcommand4); // se utiliza un tiempo de espera de consulta de 25 segundos
// se supone que la operación anterior tardó 10 segundos, , tiempo restante = 25 - 10 segundos
statement.executeUpdate(sqlcommand5); // se utiliza un tiempo de espera de consulta de 15 segundos
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // se utiliza un tiempo de espera de consulta de 20 segundos
El ejemplo siguiente muestra el efecto de establecer las propiedades personalizadas del origen de datos webSphereDefaultQueryTimeout
= 20 y syncQueryTimeoutWithTransactionTimeout =
false. Cuando solo se establece webSphereDefaultQueryTimeout, el valor de tiempo de espera predeterminado se utiliza para todas las sentencias, independientemente de si se ejecutan dentro de la transacción JTA o no:statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // se utiliza un tiempo de espera de consulta de 20 segundos
statement.executeUpdate(sqlcommand2); // se utiliza un tiempo de espera de consulta de 20 segundos
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // se utiliza un tiempo de espera de consulta de 20 segundos
// se supone que la operación anterior tardó 5 segundos
statement.executeUpdate(sqlcommand4); // se utiliza un tiempo de espera de consulta de 20 segundos
// se supone que la operación anterior tardó 10 segundos
statement.executeUpdate(sqlcommand5); // se utiliza un tiempo de espera de consulta de 20 segundos
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // se utiliza un tiempo de espera de consulta de 20 segundos
Puede alterar temporalmente el tiempo de espera de consulta para una sentencia en cualquier momento invocando la interfaz java.sql.Statement.setQueryTimeout desde el código de la aplicación.