Je souhaite résoudre les erreurs de délai d'expiration des instructions pour les requêtes qui s'exécutent sur mon cluster de bases de données (DB) Amazon Aurora édition compatible avec PostgreSQL.
Résolution
Important : Performance Insights atteindra sa fin de vie le 30 juin 2026. Vous pouvez effectuer une mise à niveau vers le mode Avancé de Database Insights avant le 30 juin 2026. Si vous n'effectuez pas de mise à niveau, les clusters de base de données qui utilisent Performance Insights passeront par défaut au mode Standard de Database Insights. Seul le mode Avancé de Database Insights prendra en charge les plans d'exécution et l’analyse à la demande. Si vos clusters passent par défaut en mode Standard, il est possible que vous ne puissiez pas utiliser ces fonctionnalités sur la console. Pour activer le mode Avancé, consultez les sections Activation du mode Avancé de Database Insights pour Amazon RDS et Activation du mode Avancé de Database Insights pour Amazon Aurora.
Si les requêtes ne s'exécutent pas dans le délai spécifié par le paramètre statement_timeout, le paramètre statement_timeout annule la requête. Le message d’erreur suivant s’affiche :
« ERROR: canceling statement due to statement timeout. »
Pour résoudre cette erreur, procédez comme suit :
Vérifiez le paramètre statement_timeout configuré
Pour vérifier le paramètre statement_timeout dans le groupe de paramètres du cluster de bases de données ou le groupe de paramètres de base de données, exécutez la requête SELECT suivante :
SELECT name, setting, unit, context, source FROM pg_settings WHERE name = 'statement_timeout';
Sortie attendue :
name | setting | unit | context | source
-------------------+---------+------+---------+--------------------
statement_timeout | 5000 | ms | user | configuration file
Remarque : dans l'exemple de sortie, le paramètre statement_timeout a une valeur de 5 000 millisecondes. Le champ « source » affiche « fichier de configuration », ce qui indique que le paramètre est défini au niveau du groupe de paramètres du cluster.
Vérifiez ensuite le paramètre statement_timeout au niveau du rôle et de la base de données.
Pour vérifier les configurations au niveau des rôles pour tous les rôles du cluster de bases de données, exécutez la requête suivante :
SELECT r.rolname, d.datname, s.setconfig
FROM pg_db_role_setting s
JOIN pg_roles r ON r.oid = s.setrole
LEFT JOIN pg_database d ON d.oid = s.setdatabase
WHERE s.setconfig::text LIKE '%statement_timeout%'
ORDER BY r.rolname;
Pour vérifier les configurations au niveau de la base de données pour toutes les bases de données du cluster, exécutez la requête suivante :
SELECT d.datname, rs.setconfig
FROM pg_db_role_setting rs
JOIN pg_database d ON d.oid = rs.setdatabase
WHERE rs.setrole = 0;
Consultez la sortie pour identifier toutes les configurations statement_timeout définies au niveau du rôle ou de la base de données qui pourraient remplacer le paramètre au niveau du cluster.
Remarque : les paramètres Statement_timeout que vous définissez avec ALTER ROLE SET n'héritent pas des rôles enfants. Si vous configurez le paramètre statement_timeout pour un rôle, vous ne pouvez utiliser le paramètre que lorsque vous vous connectez à ce rôle. Pour en savoir plus, consultez la page ALTER ROLE sur le site Web de PostgreSQL.
Identifier les requêtes SQL annulées
Consultez le fichier journal des erreurs de PostgreSQL, puis déterminez si le paramètre log_min_error_statement est défini sur ERROR ou sur une gravité inférieure. Après avoir identifié l'instruction qui a échoué, recherchez les noms SQL et de table qui ont échoué. Pour plus d'informations, consultez la section Présentation du paramètre log_line_prefix.
Identifiez la cause de la longue durée d'exécution des requêtes
Si vous trouvez la requête SQL ayant échoué, utilisez CloudWatch Database Insights pour identifier les transactions bloquées.
Pour utiliser CloudWatch Database Insights afin d'analyser les performances, procédez comme suit :
- Ouvrez la console Amazon Relational Database Service (Amazon RDS).
- Dans le volet de navigation, sélectionnez Bases de données.
- Sélectionnez votre cluster de bases de données Aurora PostgreSQL.
- Choisissez l'onglet Surveillance.
- Choisissez Afficher les détails pour Performances Insights.
- Vérifiez la charge de la base de données. Vous pouvez regrouper la charge de la base de données par événements d'attente, requêtes SQL, hôtes ou utilisateurs pour identifier les transactions bloquées.
Si le problème se reproduit régulièrement, configurez le paramètre log_min_duration_statement pour votre instance de base de données et utilisez le module auto_explain. Pour plus d'informations, consultez la section Comment journaliser les plans d'exécution des requêtes pour Amazon RDS PostgreSQL ou Aurora PostgreSQL afin d'optimiser les performances des requêtes ?
Vous pouvez également utiliser les commandes EXPLAIN et EXPLAIN ANALYZE pour obtenir le plan de requête. Pour plus d’informations, consultez la section Comment puis-je identifier et résoudre les problèmes de performance et de lenteur d’exécution des requêtes dans mon instance de base de données RDS pour PostgreSQL ou Aurora compatible avec PostgreSQL ?
Vérifiez la présence de lignes mortes dans les tables source
Les lignes mortes ou les tuples peuvent augmenter le temps de la requête SELECT. Pour vérifier la présence d'un grand nombre de lignes mortes dans les tables source, exécutez la requête suivante :
SELECT * FROM pg_stat_user_tables WHERE relname = 'table_name';
Remarque : remplacez table_name par le nom de la table source.
Informations connexes
Comment puis-je mettre fin aux requêtes de longue durée dans mon instance de base de données Amazon RDS pour PostrgreSQL ou Aurora compatible avec PostgreSQL ?
Comment identifier ce qui a bloqué une requête sur mon instance de base de données Amazon RDS PostgreSQL ou Aurora PostgreSQL ?