En haut de l'écran de l'analyseur de requêtes de Navicat Monitor 3, vous trouverez un graphique qui montre les requêtes dont les temps d'attente sont les plus longs.
Il est essentiel d'identifier les requêtes lentes, car elles pourraient faire crasher le système.
Outre corriger une requête lente une fois qu'elle a été identifiée, une autre stratégie consiste à limiter les temps d'exécution des requêtes. Dans les bases de données de qualité professionnelle telles que PostgreSQL, il existe des paramètres permettant de limiter le temps d'exécution des requêtes pour l'ensemble de la base de données ou même par utilisateur, via la variable Statement_timeout. Dans ce blog, nous allons apprendre à utiliser cette importante variable de base de données dans Navicat 16 For PostgreSQL.
Définir la variable Statement_timeout au niveau de la base de données
Définir un délai d'expiration des instructions par défaut pour votre base de données est un excellent point de départ. Cela garantit que toute application ou personne se connectant à la base de données n’aura pas de requêtes exécutées pendant trop longtemps. Une valeur par défaut raisonnable serait de 30 ou 60 secondes, mais vous pouvez mettre la valeur qui vous semble la plus adéquate. Voici une instruction qui définit une valeur de 60 secondes :
ALTER DATABASE mydatabase SET statement_timeout = '60s';
Dans Navicat 16 For PostgreSQL, nous pouvons afficher le statement_timeout via Outils > Server Monitor > PostgreSQL depuis le menu principal. Vous le trouverez dans l'onglet Variables :
En fait, vous souhaiterez peut-être utiliser l'outil Rechercher afin d'identifier la variable Statement_timeout, car il y en a beaucoup ! Vous pouvez cliquer sur le bouton bascule Tout mettre en surbrillance pour mieux identifier la variable.
Bien sûr, l'instruction Show fonctionne également :
Définir un délai d'expiration de requête pour un utilisateur spécifique
Pour un contrôle encore plus fin, vous pouvez définir une valeur de timeout de requête pour un utilisateur spécifique (vous savez, celui qui sélectionne toujours la base de données entière !). Ceci est réalisable à l'aide de l'instruction ALTER ROLE, qui peut définir de nombreuses variables de base de données, notamment Statement_timeout.
Essayons et créons tout d’abord un nouveau rôle utilisateur appelé Guest :
Nous pouvons maintenant utiliser l'instruction ALTER ROLE pour limiter le temps d'exécution des requêtes de la façon suivante:
ALTER ROLE guest SET statement_timeout='5min';
Nous pouvons interroger la table pg_roles pour obtenir des informations sur Statement_timeout (y compris comment il a été défini) :
La valeur rolconfig est un tableau, nous pouvons donc la désimbriquer pour obtenir une valeur par ligne :
Réflexions finales sur la définition des délais d'expiration des requêtes dans PostgreSQL
Il est crucial de pouvoir identifier les requêtes lentes, car elles peuvent réduire les performances de votre base de données à un niveau très bas. Pour cela, le graphique des requêtes de longue durée de Navicat Monitor 3 en haut de l'écran de l'analyseur de requêtes vous facilitera la tâche.
Une autre approche consiste à limiter la durée d'exécution d'une requête avant son expiration. Comme nous l'avons vu dans le blog d'aujourd'hui, dans PostgreSQL, cela peut être fait au niveau de la base de données, de la session et même au niveau de l’utilisateur.
Si vous n'avez pas encore configuré votre ou vos variables Statement_timeout, je vous encourage à le faire dès que possible. Il s’agit d’un simple paramétrage qui contribuera à garantir que votre instance de base de données reste saine et disponible.
Vous souhaitez essayer Navicat 16 for PostgreSQL ? Vous pouvez télécharger l'application entièrement fonctionnelle ici pour bénéficier d'un essai gratuit de 14 jours!