Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Utilisation de la fonction autovacuum de PostgreSQL sur Amazon Aurora PostgreSQL
Nous vous conseillons vivement d’utiliser la fonction autovacuum afin de maintenir l’intégrité de votre instance de base de données PostgreSQL. La fonction autovacuum automatise le lancement des commandes VACUUM et ANALYZE. Elle vérifie les tables ayant eu un grand nombre de tuples insérés, mis à jour ou supprimés. Après cette vérification, elle récupère le stockage en supprimant les données ou les tuples obsolètes de la base de données PostgreSQL.
Par défaut, la fonction autovacuum est activée sur les instances de base de données Aurora PostgreSQL que vous créez en utilisant l’un des groupes de paramètres de base de données PostgreSQL par défaut. Les autres paramètres de configuration associés à la fonction autovacuum sont également définis par défaut. Comme ces valeurs par défaut sont relativement génériques, vous pouvez bénéficier du réglage de certains paramètres associés à la fonction d’autovacuum pour votre charge de travail spécifique.
Vous trouverez ci-dessous de plus amples informations sur l’autovacuum et sur la façon de régler certains de ses paramètres sur votre instance de base de données Aurora PostgreSQL.
Rubriques
Réduction de la probabilité de bouclage de l’ID de transaction
Déterminer si les tables de votre base de données ont besoin d’une opération VACUUM
Déterminer les tables actuellement éligibles pour autovacuum
Déterminer si autovacuum est en cours d'exécution et pour combien de temps
Réindexation d'une table pendant l'exécution du processus autovacuum
Définition des paramètres d'autovacuum au niveau de la table
Comprendre le comportement de l’autovacuum avec les bases de données non valides
Identification et résolution des bloqueurs de vacuum agressifs dans Aurora PostgreSQL
Allocation de mémoire pour la fonction autovacuum
L’un des paramètres les plus importants qui influencent les performances d’autovacuum est autovacuum_work_memautovacuum_work_mem est défini sur -1, ce qui indique que le paramètre maintenance_work_mem est utilisé à la place. Pour toutes les autres versions, autovacuum_work_mem est déterminé par GREATEST({DBInstanceClassMemory/32768}, 65536).
Les opérations de vacuum manuel utilisent toujours le paramètre maintenance_work_mem, avec le paramètre par défaut GREATEST({DBInstanceClassMemory/63963136*1024}, 65536). Il peut également être ajusté au niveau de la session à l’aide de la commande SET pour des opérations VACUUM manuelles plus ciblées.
autovacuum_work_mem détermine la mémoire permettant à l’autovacuum de contenir les identifiants des tuples inactifs (pg_stat_all_tables.n_dead_tup) pour les opérations de vacuum d’index.
Lors des calculs visant à déterminer la valeur du paramètre autovacuum_work_mem, tenez compte des points suivants :
-
Si vous définissez une valeur trop basse pour ce paramètre, le processus vacuum pourrait avoir à analyser la table plusieurs fois pour mener à bien sa tâche. Ces nombreuses analyses peuvent avoir un impact négatif sur les performances. Pour les instances plus grandes, le réglage de
maintenance_work_memouautovacuum_work_memsur au moins 1 Go peut améliorer les performances des opérations de vacuum des tables contenant un grand nombre de tuples inactifs. Cependant, dans les versions 16 et antérieures de PostgreSQL, l’utilisation de la mémoire de vacuum est limitée à 1 Go, ce qui est suffisant pour traiter environ 179 millions de tuples inactifs en un seul passage. Si une table contient plus de tuples inactifs que cela, l’opération de vacuum doit effectuer plusieurs passages dans les index de la table, ce qui augmente considérablement le temps requis. À partir de la version 17 de PostgreSQL, il n’y a pas de limite de 1 Go et l’autovacuum peut traiter plus de 179 millions de tuples en utilisant des arbres radix.Un identifiant de tuple a une taille de 6 octets. Pour estimer la mémoire nécessaire afin d’effectuer le vacuum d’un index d’une table, interrogez
pg_stat_all_tables.n_dead_tuppour chercher le nombre de tuples inactifs, puis multipliez ce nombre par 6 pour déterminer la mémoire requise pour effectuer le vacuum de l’index en un seul passage. Vous pouvez utiliser la requête suivante :SELECT relname AS table_name, n_dead_tup, pg_size_pretty(n_dead_tup * 6) AS estimated_memory FROM pg_stat_all_tables WHERE relname = 'name_of_the_table'; -
Le paramètre
autovacuum_work_memfonctionne en conjonction avec le paramètreautovacuum_max_workers. Chaque application de travail parmiautovacuum_max_workerspeut utiliser la mémoire que vous allouez. Si vous avez beaucoup de petites tables, allouez plus deautovacuum_max_workerset moins deautovacuum_work_mem. Si vous avez de grandes tables (d’une taille supérieure à 100 Go), allouez plus de mémoire et moins de processus de travail. Vous devez avoir alloué suffisamment de mémoire pour pouvoir prendre en charge votre plus grande table. Assurez-vous donc que la combinaison des processus de travail et de la mémoire est égale à la mémoire totale que vous souhaitez allouer.
Réduction de la probabilité de bouclage de l’ID de transaction
Dans certains cas, les valeurs du groupe de paramètres associées à la fonction autovacuum peuvent ne pas être suffisamment agressives pour empêcher le bouclage de l’ID de transaction. Pour résoudre ce problème, Aurora PostgreSQL fournit un mécanisme qui adapte automatiquement les valeurs des paramètres d’autovacuum. Autovacuum adaptatif est une fonctionnalité pour Aurora PostgreSQL. Une explication détaillée du bouclage de l’ID de transaction
L’autovacuum adaptatif est activé par défaut pour les instances Aurora PostgreSQL avec le paramètre dynamique rds.adaptive_autovacuum défini sur ON. Nous vous recommandons vivement de garder cette option activée. Toutefois, pour désactiver le réglage adaptatif des paramètres d’autovacuum, définissez le paramètre rds.adaptive_autovacuum sur 0 ou OFF.
Le bouclage de l’ID de transaction reste possible même lorsque Aurora Amazon RDS ajuste les paramètres d’autovacuum. Nous vous encourageons à implémenter une alarme Amazon CloudWatch pour le bouclage de l’ID de transaction. Pour plus d’informations, consultez l’article Implement an early warning system for transaction ID wraparound in RDS pour PostgreSQL
Lorsque le réglage adaptatif des paramètres d’autovacuum est activé, Amazon RDS commence à ajuster les paramètres d’autovacuum lorsque la métrique CloudWatch MaximumUsedTransactionIDs atteint la valeur du paramètre autovacuum_freeze_max_age ou 500 000 000, quelle que soit la valeur la plus élevée.
Amazon RDS continue à ajuster les paramètres pour la fonction autovacuum si une table continue à s’orienter vers le bouclage de l’ID de transaction. Chacun de ces ajustements dédie plus de ressources à la fonction d’autovacuum pour éviter le bouclage. Amazon RDS met à jour les paramètres suivants associés à la fonction d’autovacuum :
RDS modifie ces paramètres seulement si la nouvelle valeur rend la fonction d’autovacuum plus agressive. Ces paramètres sont modifiés dans la mémoire sur l’instance de base de données. Les valeurs figurant dans le groupe de paramètres ne sont pas modifiées. Pour afficher les paramètres en mémoire actuels, utilisez la commande SQL SHOW
Chaque fois que Amazon RDS modifie l’un de ces paramètres d’autovacuum, il génère un événement pour l’instance de base de données concernée. Cet événement est visible sur l’AWS Management Console et via l’API Amazon RDS. Une fois que la métrique CloudWatch MaximumUsedTransactionIDs est repassée sous le seuil, Amazon RDS réinitialise les paramètres associés à la fonction autovacuum en mémoire en rétablissant les valeurs spécifiées dans le groupe de paramètres. Il génère ensuite un autre événement correspondant à cette modification.