FirebirdSQL logo

SET STATEMENT TIMEOUT

Destination

Définir un délai d’attente au niveau de la connexion pour l’exécution des instructions SQL.

Disponible en

DSQL

Syntaxe:
SET STATEMENT TIMEOUT value [HOUR | MINUTE | SECOND | MILLISECOND]
Table 1. Paramètres de l’opérateur SET STATEMENT TIMEOUT
Paramètre Description

value

La valeur du délai d’exécution des instructions SQL dans les unités de temps spécifiées. Si aucune unité de temps n’est spécifiée, la valeur par défaut du délai d’exécution est mesurée en secondes.

Définit la valeur du délai d’exécution des instructions SQL au niveau de la connexion actuelle. Si aucune unité de temps n’est spécifiée, le délai par défaut sera compté en secondes.

Note

Cette instruction SQL fonctionne en dehors du mécanisme de contrôle des transactions et prend effet immédiatement.

Example 1. Définition d’un délai d’attente pour les instructions SQL
SET STATEMENT TIMEOUT 2 MINUTE
Note

L’outil interactif isql prend également en charge la commande :

SET LOCAL_TIMEOUT int

Cette commande vous permet de définir un délai d’attente (en millisecondes) pour l’instruction suivante. Une fois l’instruction SQL exécutée, il est automatiquement remis à zéro.

Délai d’inactivité de la connexion

Cette fonctionnalité permet de fermer automatiquement les connexions des utilisateurs après une période d’inactivité.Il peut être utilisé par les administrateurs de bases de données pour fermer de force les anciennes connexions inactives et libérer les ressources associées.Les applications et les outils de développement peuvent l’utiliser comme substitut au contrôle maison de la durée de vie des connexions.

Il est recommandé (mais pas obligatoire) de définir le délai d’inactivité à une valeur raisonnablement élevée, par exemple quelques heures.Par défaut, cette fonction est désactivée.

Cette fonctionnalité fonctionne comme suit.Lorsqu’un appel de l’utilisateur à l’API quitte le moteur, une minuterie spéciale est lancée et est associée à la connexion actuelle.Dès que l’appel de l’utilisateur entre dans le moteur, la minuterie de ralenti est arrêtée.Si le délai d’inactivité expire, le moteur ferme la connexion comme si une annulation asynchrone avait eu lieu :

  • toutes les déclarations et curseurs actifs sont fermés ;

  • toutes les transactions actives sont annulées ;

  • toutes les connexions réseau ne sont pas fermées pour le moment. Cela permet à l’application cliente d’obtenir le code d’erreur exact pour le prochain appel de l’API. La connexion réseau sera fermée du côté serveur après que l’erreur a été signalée, ou si le côté client se déconnecte lorsque le délai d’attente du réseau expire.

Le délai d’inactivité de la connexion peut être défini :

  • Au niveau de la base de données. La valeur du ConnectionIdleTimeout peut être définie dans firebird.conf (ou databases.conf) par l’administrateur de la base de données. La portée est l’ensemble des connexions de l’utilisateur, à l’exclusion des connexions du système (garbage collector, cache writer, etc.). Le paramètre ConnectionIdleTimeout définit le délai en minutes, après lequel une connexion inactive sera terminée par le moteur. Zéro signifie qu’aucun délai n’est défini. La valeur par défaut est 0.

  • Au niveau de la connexion. Peut être défini en utilisant l’API (en secondes) ou avec l’opérateur SQL SET SESSION IDLE TIMEOUT. Le champ d’application est constitué de tous les opérateurs de la connexion en cours.

La valeur effective du délai d’inactivité est calculée chaque fois qu’un appel API utilisateur quitte le moteur comme suit :

  • si le délai d’attente n’est pas défini au niveau de la connexion, la valeur au niveau de la base de données sera utilisée ;

  • La valeur du délai d’attente ne peut pas être supérieure à la valeur définie au niveau de la base de données. Ainsi, la valeur du délai d’inactivité peut être modifiée par le développeur de l’application pour une connexion donnée, mais elle ne peut pas dépasser la limite fixée par le DBA dans la configuration.

Un délai d’attente nul ne signifie pas qu’il n’y a pas de délai d’attente, mais simplement que le temporisateur de délai d’attente n’est pas lancé.

Bien que le délai d’inactivité puisse être défini en secondes, une précision absolue n’est pas garantie.Il peut être moins précis dans des conditions de charge élevée.La seule garantie que Firebird peut donner est que le timeout ne sera pas déclenché avant le temps spécifié.