Configuration de QueryTimeout
Vous pouvez configurer un délai d'expiration de demande sur la source de données d'une application, afin qu'une instruction SQL (Structured Query Language) soit interrompue si elle ne parvient pas à terminer l'exécution avant le nombre indiqué de secondes.
Avant de commencer
Pourquoi et quand exécuter cette tâche
- webSphereDefaultQueryTimeout établit un délai d'expiration de demande par défaut, qui correspond au nombre de secondes durant lesquelles une instruction SQL peut être en cours d'exécution avant l'expiration du délai. La valeur par défaut est remplacée lors d'une transaction JTA (Java™ Transaction API) si la propriété personnalisée syncQueryTimeoutWithTransactionTimeout est activée.
- syncQueryTimeoutWithTransactionTimeout utilise le cas échéant le temps restant d'une transaction JTA en tant que délai d'expiration de demande par défaut pour les instructions SQL.
- le temps restant dans la transaction JTA en cours en fonction du paramètre de délai d'expiration TM (Transaction Manager) - syncQueryTimeoutWithTransactionTimeout
- le nombre absolu de secondes défini par la configuration - webSphereDefaultQueryTimeout
Procédure
Résultats
Exemple
statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // query timeout of 20 seconds is used
statement.executeUpdate(sqlcommand2); // query timeout of 20 seconds is used
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // query timeout of 30 seconds is used
// assume the above operation took 5 seconds, remaining time = 30 - 5 seconds
statement.executeUpdate(sqlcommand4); // query timeout of 25 seconds is used
// assume the above operation took 10 seconds, , remaining time = 25 - 10 seconds
statement.executeUpdate(sqlcommand5); // query timeout of 15 seconds is used
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // query timeout of 20 seconds is used
L'exemple ci-dessous illustre l'impact de la définition des propriétés personnalisées de source de données
webSphereDefaultQueryTimeout = 20 et syncQueryTimeoutWithTransactionTimeout =
false. Lorsque seul webSphereDefaultQueryTimeout est défini, la valeur de délai d'expiration par défaut est utilisée pour toutes les instructions, qu'elles soient exécutées dans une transaction JTA ou non :statement = connection.createStatement();
statement.executeUpdate(sqlcommand1); // query timeout of 20 seconds is used
statement.executeUpdate(sqlcommand2); // query timeout of 20 seconds is used
transaction.setTransactionTimeout(30);
transaction.begin();
try
{
statement.executeUpdate(sqlcommand3); // query timeout of 20 seconds is used
// assume the above operation took 5 seconds
statement.executeUpdate(sqlcommand4); // query timeout of 20 seconds is used
// assume the above operation took 10 seconds
statement.executeUpdate(sqlcommand5); // query timeout of 20 seconds is used
}
finally
{
transaction.commit();
}
statement.executeUpdate(sqlcommand6); // query timeout of 20 seconds is used
Vous pouvez remplacer
le délai d'expiration de demande pour une instruction à tout moment en appelant l'interface
java.sql.Statement.setQueryTimeout à partir de votre code d'application.