Configurer les paramètres du serveur de nettoyage automatique

Effectué

Le processus de nettoyage est configuré en utilisant les paramètres de serveur autovacuum qui vous permettent d’optimiser le processus de nettoyage pour votre charge de travail. Dans le portail Azure, sélectionnez votre serveur Azure Database pour PostgreSQL, puis sélectionnez Paramètres du serveur dans le menu de gauche. Dans la barre de recherche, entrez nettoyage automatique. Nous pouvons également utiliser SQL pour interroger les vues de catalogue système afin de trouver la configuration actuelle du nettoyage automatique en utilisant la requête suivante.

SELECT *
FROM pg_settings 
WHERE "name" LIKE '%autovacuum%';
Nom du paramètre Default Description
nettoyage automatique ACTIVÉ Active ou désactive le processus du serveur de nettoyage automatique. Le nettoyage automatique doit toujours être activé.
autovacuum_analyze_scale_factor 0.1 Spécifie une fraction de la taille de la table à ajouter à autovacuum_vacuum_threshold lors de la décision de déclenchement d’une opération de nettoyage. Par exemple, 0,2 correspond à 20 % de la taille de la table.
autovacuum_analyze_threshold 50 Nombre de lignes insérées, mises à jour ou supprimées nécessaires pour déclencher le processus analyse d’une table.
autovacuum_freeze_max_age 200000000 Âge maximal (en transactions) avant de déclencher un nettoyage automatique sur une table pour empêcher le bouclage de l’ID de transaction.
autovacuum_max_workers 3 Nombre maximal de processus de nettoyage automatique en cours d’exécution à tout moment, autre que le lanceur de nettoyage automatique.
autovacuum_multixact_freeze_max_age 400000000 Âge maximal (dans multixact) avant de déclencher le nettoyage automatique sur une table pour empêcher le bouclage de multixact.
autovacuum_naptime 60 s Délai entre les processus de nettoyage automatique sur une base de données. À chaque cycle, le démon examine la base de données et émet des commandes de nettoyage et d’analyse en fonction des besoins pour les tables de cette base de données.
autovacuum_vacuum_cost_limit -1 Coût maximal des opérations de nettoyage automatique. Si vous spécifiez -1 (la valeur par défaut), la valeur régulière de vacuum_cost_limit est utilisée. S’il existe plusieurs Workers, la valeur est répartie proportionnellement entre les Workers de nettoyage automatique actuellement exécutés. La somme pour chaque Worker ne peut pas dépasser la valeur de cette variable.
autovacuum_vacuum_insert_threshold 1 000 Nombre de lignes insérées qui déclenchent un nettoyage pour une table.
autovacuum_vacuum_scale_factor 0.2 Utilisé avec autovacuum_vacuum_threshold. Fraction d’une table utilisée pour déterminer le déclenchement d’un nettoyage.
autovacuum_vacuum_threshold 50 Nombre minimal de lignes mises à jour, insérées ou supprimées pour déclencher un nettoyage pour une table.
autovacuum_vacuum_insert_scale_factor 0.2 Spécifie une fraction de la taille de la table à ajouter à autovacuum_vacuum_insert_threshold pour déclencher le processus de nettoyage.
autovacuum_work_mem - 1 Ko Mémoire maximale utilisable par chaque processus de nettoyage automatique.
log_autovacuum_min_duration -1 Temps en millisecondes journalisé par les actions du nettoyage automatique.

Le processus de nettoyage ne doit pas être exécuté trop fréquemment, ni trop rarement. La fréquence optimale dépend de la charge de travail. Testez chacun des paramètres de nettoyage automatique pour trouver ce qui fonctionne le mieux pour votre charge de travail. Le coût du processus de nettoyage comprend :

  • Les pages de données sont verrouillées quand le nettoyage s’exécute.
  • Le processus de nettoyage consomme du temps de calcul et de la mémoire.

Optimiser le nettoyage au niveau de la table

Dans Azure Database pour PostgreSQL, les paramètres de nettoyage automatique peuvent être définis au niveau de la table. Quand certaines tables sont mises à jour plus que d’autres, les performances peuvent s’en retrouver améliorées. Exemple de définition d’un nettoyage automatique au niveau de la table :

ALTER TABLE mytable SET (autovacuum_vacuum_threshold = 1000);
​ALTER TABLE mytable SET (autovacuum_vacuum_scale_factor = 0.1);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_limit = 1000);
ALTER TABLE mytable SET (autovacuum_vacuum_cost_delay = 10);

Au niveau de la table, le nettoyage automatique est un processus synchrone. Plus le pourcentage de tuples morts d’une table est élevé, plus le « coût » facturé par le processus de nettoyage automatique est élevé.

Quand les tables ont un taux élevé de mises à jour, envisagez de les fractionner en plusieurs tables. Ce fractionnement permet de paralléliser le nettoyage automatique et de réduire le « coût » par table. Vous pouvez aussi augmenter le nombre de Workers de nettoyage automatique parallèle.